programing

MySQL의 BLACKHOLE Engine의 목적은 무엇입니까?

javaba 2022. 10. 27. 23:40
반응형

MySQL의 BLACKHOLE Engine의 목적은 무엇입니까?

회수할 수 없는 것을 왜 나중에 저장합니까?그게 무슨 소용이야?

이 기능은 모든 SQL 문이 모든 노드에서 실행되지만 일부 노드에서만 실제로 결과를 저장하는 복제 환경에서 유용합니다.이것은 매뉴얼에 기재되어 있는 사용 사례입니다.http://dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

이 문서에는 다음과 같은 용도가 기재되어 있습니다.

  • 덤프 파일 구문 확인.
  • BLACKHOLE을 사용한 퍼포먼스와 바이너리 로깅을 활성화한 퍼포먼스를 비교하여 바이너리 로깅의 오버헤드를 측정합니다.
  • BLACKHOL은 기본적으로 "no-op" 스토리지 엔진이므로 스토리지 엔진 자체와 관련이 없는 성능 병목 현상을 발견하는 데 사용될 수 있습니다.

각각 MySQL 서버를 실행하는 두 대의 컴퓨터가 있다고 가정합니다.한 시스템은 주 데이터베이스를 호스트하고 두 번째 시스템은 백업으로 사용하는 복제 슬레이브를 호스트합니다.

또한 주 서버에 백업하지 않을 데이터베이스 또는 테이블이 포함되어 있다고 가정합니다.아마도 그것들은 고차단 캐시 테이블일 것이고, 콘텐츠를 잃어버려도 상관없습니다.따라서 디스크 공간을 절약하고 CPU, 메모리 및 디스크 IO를 불필요하게 사용하지 않도록 복제 옵션을 사용하여 백업하지 않는 테이블에 영향을 주는 문을 무시하도록 슬레이브를 구성합니다.

단, 레플리케이션필터는 슬레이브 서버에만 적용되므로 마스터 서버에서 실행되는 모든 문의 binlog는 네트워크를 통해 전송해야 합니다.여기서는 대역폭이 낭비되고 있습니다.마스터 서버는 트랜잭션에 대해 binlog를 송신하고 있습니다.binlog를 수신하면 슬레이브가 폐기합니다.불필요한 대역폭 사용을 방지하고 보다 효율적으로 수행할 수 있을까요?

네, 할 수 있어요. 그리고 거기서 블랙홀 엔진이 필요하죠.마스터 서버가 실행되고 있는 같은 컴퓨터에서 두 번째 더미를 실행합니다.mysqld프로세스, 이것은 BLACKHOLE 데이터베이스를 호스팅하고 있습니다.이 더미 프로세스는 실제 슬레이브와 동일한 복제 옵션을 사용하여 마스터 프로세스의 binlog에서 복제하고 자체 binlog를 생성하도록 구성합니다.더미 프로세스의 binlog에는 현재 실제 슬레이브가 필요로 하는 스테이트먼트만 포함되어 있으며 binlog에서 불필요한 스테이트먼트를 필터링하는 것 이외의 실제 작업은 이루어지지 않았습니다(BLACKHOLE 엔진을 사용하고 있기 때문에).마지막으로 원래 마스터 프로세스의 binlog가 아닌 더미 프로세스의 binlog에서 복제하도록 진정한 슬레이브를 구성합니다.이제 마스터 서버와 슬레이브 서버를 호스팅하는 두 컴퓨터 간의 불필요한 네트워크 트래픽을 제거했습니다.

이 설정은 이 단락과 BLACKHOLE 문서의 다이어그램에 의해 설명 및 설명되고 있습니다(좀 더 간결함).

애플리케이션에 슬레이브 측 필터링 규칙이 필요하지만 먼저 모든 바이너리 로그 데이터를 슬레이브로 전송하면 트래픽이 너무 많아진다고 가정합니다.이 경우 다음과 같이 기본 스토리지 엔진이 BLACKHOLE인 "더미" 슬레이브 프로세스를 마스터 호스트에 설정할 수 있습니다.

Diagram of the scenario described above

필터링에 가세해, BLACKHOLE 서버를 binlogging이 유효하게 하고 있는 을 「리피터로서 편리...」메커니즘으로서도 유용하게 사용할 수 있습니다.이 사용 사례는 문서에서는 거의 설명되지 않지만, 이것이 타당할 것으로 생각되는 시나리오를 생각할 수 있습니다.예를 들어, 서로 고속 로컬 접속이 가능한 로컬 네트워크상의 컴퓨터에 많은 슬레이브 서버가 있으며, 모두 인터넷을 통해서만 접속할 수 있는 리모트 슬레이브로부터 대량의 데이터를 복제할 필요가 있다고 가정합니다.모든 데이터를 마스터 박스에서 직접 복제하는 것은 원치 않습니다.그 후 동일한 데이터를 여러 번 가져오고 필요한 것보다 몇 배 더 많은 인터넷 대역폭을 사용하게 됩니다.그러나 기존 슬레이브 중 하나만 마스터에서 복제하고 다른 슬레이브는 마스터에서 복제하고 싶지 않다고 가정합니다.슬레이브가 마스터보다 신뢰성이 훨씬 낮은 머신에서 실행되고 있거나 CPU 또는 메모리를 모두 소비하여 박스를 파괴할 수 있는 기타 프로세스를 실행하고 있기 때문에 슬레이브는 마스터에서 복제하고 싶지 않습니다.중간 슬레이브에서 소프트웨어 또는 하드웨어 장애가 발생하여 슬레이브 네트워크 전체가 다운됩니다.무슨 일을 하세요?

한 가지 가능한 타협점은 슬레이브 네트워크에 추가 박스를 도입하여 스토리지보다 신뢰성과 성능에 최적화된 매개체 역할을 하는 것입니다.작고 신뢰성이 높은 SSD 드라이브를 구입하고, 이 드라이브에서는mysqld다른 슬레이브가 서브스크라이브할 수 있는 binlog를 생성합니다.그리고 물론 이 중간 슬레이브는 BLACKHOLE 엔진을 사용하도록 설정하여 저장 공간이 필요하지 않습니다.

이 방법과 설명서에 자세히 설명되어 있는 중간 필터링 슬레이브는 모두 엣지 케이스입니다.대부분 MySQL 사용자는 이러한 전략 중 하나를 사용하여 이익을 얻을 수 있는 상황에 처하지 않습니다.실제로 셋업하는 작업을 정당화할 수 있을 정도의 이익을 얻을 수 있는 것은 말할 것도 없습니다.그러나 적어도 이론적으로는 BLACKHOLE 엔진을 사용하여 대역폭 절약 전략으로 슬레이브를 복제하는 네트워크에서 중간 노드를 생성할 수 있습니다.이 노드는 실제로 디스크에 데이터를 저장할 필요가 없습니다.

유지하지 않을 데이터에 대해 트리거를 실행하는 데 유용합니다.

예를 들어 현재 mysql은 쿼리 결과를 통한 반복을 지원하지 않습니다.따라서 "insert to <blackhole_table> (여기서 select col1, col2, col3 from <some_other_table> )"을 사용하여 동일한 작업을 수행하는 솔루션을 구현할 수 있습니다.

그런 다음 선택한 데이터의 '각' 작업에서 수행할 작업을 수행하는 블랙홀 테이블에 삽입 시 트리거를 추가합니다.

블랙홀은 결과를 저장하지 않기 때문에 나중에 청소할 필요가 없으며, 결국 각각에 대한 간단한 솔루션을 얻게 됩니다.

언급URL : https://stackoverflow.com/questions/4593496/what-is-the-purpose-of-mysqls-blackhole-engine

반응형