Mariadb를 사용할 때 발생하는 두 가지 문제 공유
MySQL 새 버전 선정
회사에서는 초기에는 mysql5.5 버전을 주로 사용했는데, 올해는 데이터베이스 구성 센터를 구축하고 성능과 성능을 모두 갖춘 mysql5.6 버전을 주로 홍보했습니다. 기능이 개선되면 mysql5.6도 gtid를 지원할 수 있지만 온라인에서 gtid 모드와 일반 모드 사이를 전환할 수는 없습니다. 동시에 5.6의 동기화 성능은 여전히 만족스럽지 못하며 이러한 경우에만 병렬 복제를 시작할 수 있습니다. 비즈니스에서는 이러한 보장이 어렵기 때문에 쓰기 작업이 집중되면 동기화 속도가 느려지는 것이 심각한 문제가 될 것입니다.
그래서 최근 MySQL 업그레이드를 고려하고 있습니다. MySQL을 업그레이드할 때 가장 먼저 직면하는 문제는 적합한 버전을 선택하는 것입니다. 우선 mysql5.7 사용을 고려하고 있습니다. 5.7은 올해 여러 가지 공식 버전으로 출시되었습니다. 공식적인 환경에서 사용하는 것이 고려될 수 있습니다. 그래서 우리는 온라인 비교 테스트를 실시한 결과 mysql5.7과 온라인 버전의 mysql5.6 사이에 성능에 큰 차이가 있음을 발견했습니다(일부 매개 변수가 제대로 조정되지 않았기 때문일 수도 있지만 실제로 5.7은 훨씬 더 복잡합니다).
동시에 회사에서는 최근 일부 로그 저장소를 자주 보았습니다. 대부분 innodb 엔진을 사용하는데 이는 용량 낭비입니다. 반면에 우리 회사의 표준 mysql 서버 용량은 대략 1.3T, 일부 대규모 기업의 경우 용량 요구 사항이 있는 경우에도 용량 병목 현상이 발생하므로 장기간 데이터를 보관하려면 수요를 충족하기 어려울 수 있습니다. 그래서 이번 기회에 Percona와 Mariadb 모두 Tokudb를 지원하고 있으며 Mariadb 10.2나 10.3에서도 Myrocks를 지원할 계획입니다.
그래서 비교 테스트를 하기로 결정하고 Percona 5.7.14, Mariadb 10.1.18 및 온라인 MySQL 5.6을 비교 테스트로 선택하고 스트레스 테스트를 통과했습니다.
우선 Innodb 엔진을 사용합니다:
Mariadb와 MySQL5.6의 테스트 결과가 비슷합니다.
Percona 5.7.14의 성능 결과와 공식 MySQL5.7은 MySQL 5.6과 비교하면 비슷합니다(performance_schema를 제거하는 것이 더 좋지만 여전히 차이가 있습니다).
Tokudb 엔진을 사용한 테스트 결과는 공식 주장과 다릅니다. snappy 압축을 사용할 경우 삽입 속도는 innodb보다 1/4 정도 느리고 업데이트 속도는 innodb의 절반 정도에 불과합니다. 페르코나의 성능이 더 나쁘기 때문에 고려하지 않을 것입니다.
마침내 Mariadb 10.1.18을 선택하고 온라인으로 사업을 전개하게 되었고, 이 사업을 천천히 시도한 후 점차 추진하게 되었습니다.
Mariadb를 사용하면서 겪게 되는 몇 가지 함정
저는 Mariadb를 사용하는 과정에서 많은 문제에 직면했습니다. 여기서는 참고로 제가 겪었던 두 가지 주요 문제를 주로 언급합니다. >
1. 동기화 성능 문제:
비즈니스 피크 기간이 9,000회/초를 넘었습니다. 첫 번째 문제는 동기화 성능이 슬레이브 수를 따라가지 못한다는 것입니다. 동기화 스레드는 16개 스레드로 늘어나 거의 따라잡을 수 없습니다. 그러나 데이터베이스가 잠시 중지되면 결코 따라잡지 못할 가능성이 있습니다. 거의 절망에 빠졌을 때 mariadb 공식 기사(https://mariadb.com/kb/en/mariadb/parallel-replication/)를 읽었습니다. Mariadb의 병렬 복제는 순차 모드와 두 가지 모드를 지원합니다. 비순차적이지만 당사 비즈니스는 순차순을 지원하므로 비순차적 모드에서는 보수적 및 낙관적이라는 두 가지 유형이 지원됩니다. 이 병렬 모드는 엄격하게 지원됩니다. 5.7의 그룹 커밋 원칙과 유사한 순서를 보장합니다. 낙관적 모드에서는 복제 중에 가능한 한 많은 세션이 시작되고 충돌이 발견될 때까지 충돌이 처리되지 않습니다. 과감히 Optimistic을 사용해 보았는데 최대 동기화 속도가 14,000회/초로 매우 강력했습니다.
2. "메모리 누수"
시스템 배포 구조는 MariaDB 2개를 마스터-마스터 복제로 사용하고, 자체 개발한 분산 데이터베이스를 전면 배포하고, 사업측은 분산 데이터베이스 데이터베이스 프로세스에 연결합니다. 시스템이 며칠 동안 온라인 상태가 된 후 기본 데이터베이스가 설명할 수 없을 정도로 중단되는 것으로 나타났습니다. 다행스럽게도 분산 데이터베이스가 있으며 MariaDB 기본 데이터베이스가 중단되면 자동으로 다른 기본 데이터베이스로 전환됩니다. 비즈니스 측이 눈치채지 못하게 데이터베이스를 관리합니다. 커널 로그를 확인해보니 OOM이었고 커널이 MySQL을 종료한 것으로 나타났습니다.
그래서 Tokudb 엔진 구성을 제거하고 Mariadb 10.1.19로 변경하는 등 다양한 시도를 해봤지만 결국 메인 데이터베이스가 충돌했습니다. 우연히 메인 라이브러리에서 슬레이브를 중지했는데 갑자기 메인 라이브러리의 메모리가 많이 줄어들고 메모리가 더 이상 늘어나지 않는 것을 발견했습니다. 그런데 메인 라이브러리에서 슬레이브를 시작하자마자 메모리가 증가하지 않는 것을 발견했습니다. 점차적으로 다시 증가했습니다. 이 현상은 mysql 스레드의 메모리 할당 메커니즘(mem_root 기반 메모리 할당, 스레드가 중지되면 모두 해제됨)과 매우 유사하므로 초기에는 이것이 원인일 것으로 의심됩니다. 듀얼 마스터의 다른 MariaDB와 마찬가지로 메모리 증가 문제는 없을 것으로 나타났습니다.
위 현상을 발견한 후 gdb를 사용하여 하나의 mariadb를 시작하고 다른 하나는 일반 명령으로 이 두 라이브러리를 이중 마스터로 만듭니다.
첫 번째 방법 상황: 슬레이브 라이브러리로 테스트할 때 수신된 binlog 이벤트
일반 명령으로 시작된 mariadb에 데이터 행을 삽입하여 수신된 이벤트를 보는 순서는 다음과 같습니다.
### i ) Gtid_log_event ### ii) Table_map_log_event ### iii) Write_rows_log_event ### iv) Xid_log_event
아니요. 두 가지 상황: 메인 라이브러리로 테스트할 때 binlog 이벤트가 수신되었습니다.
在gdb启动的mariadb上插入一行记录,然后gdb观察接收到的事件为:
### 1)Rotate_log_event ### 2)Gtid_list_log_event ### 3)Rotate_log_event
Rotate_log_event事件是虚拟出来的,用于让主库跟上从库的同步位置,这基本上是一个空事件,没有做任何处理,所以初步怀疑是在处理Gtid_list_log_event事件的时候,出现了问题。
反复查看Gtid_list_log_event::do_appy_event函数中的调用情况,发现确实有些方法会调用thd->alloc来分配内存,但是没有回收,所以造成内存不断的增大,我考虑了一下,因为是主库对于同步性能要求也不高,所以在Gtid_list_log_event::do_apply_event函数的最后加了一行代码:free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC)); 重新编译后,跑了一天,内存终于稳定了。
由于目前发现只有主库有该事件,主库同步处理性能要求不高,所以暂时先这样用着了。不知道mariadb官方版本什么时候会优化一下。
总体来看,Mariadb还是比较适合我们公司的,它有最新的功能、特性能够给我们提供很多解决方案。Tokudb可以解决日志型存储的问题;连接池可以解决大量连接情况下性能地下的问题;审计插件提供安全方面的审核;slave并发模式能够提供高性能的复制能力。除了这些常见功能以外,Mariadb还提供了Cassandra插件、图数据库插件等等,这些都给我们给业务的服务增加了想象力。
【相关推荐】
2. MySQL最新手册教程
3. 数据库设计那些事
위 내용은 Mariadb를 사용할 때 발생하는 두 가지 문제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











클러스터링 알고리즘에서 클러스터링 효과 평가 문제에는 특정 코드 예제가 필요합니다. 클러스터링은 데이터를 클러스터링하여 유사한 샘플을 하나의 범주로 그룹화하는 비지도 학습 방법입니다. 클러스터링 알고리즘에서는 클러스터링의 효과를 어떻게 평가하는가가 중요한 문제입니다. 이 기사에서는 일반적으로 사용되는 몇 가지 클러스터링 효과 평가 지표를 소개하고 해당 코드 예제를 제공합니다. 1. 클러스터링 효과 평가 지수 실루엣 계수 실루엣 계수는 표본의 근접성 및 다른 클러스터와의 분리 정도를 계산하여 클러스터링 효과를 평가합니다.

강력한 성능과 다재다능한 기능으로 잘 알려진 iPhone은 복잡한 전자 장치에서 흔히 발생하는 문제인 가끔씩 발생하는 문제나 기술적인 어려움으로부터 자유롭지 않습니다. iPhone 문제를 경험하면 실망스러울 수 있지만 일반적으로 알람은 필요하지 않습니다. 이 종합 가이드에서는 iPhone 사용과 관련하여 가장 일반적으로 직면하는 문제 중 일부를 쉽게 설명하는 것을 목표로 합니다. 당사의 단계별 접근 방식은 이러한 일반적인 문제를 해결하는 데 도움을 주고 장비를 최상의 작동 순서로 되돌릴 수 있는 실용적인 솔루션과 문제 해결 팁을 제공하도록 설계되었습니다. 결함이 있거나 더 복잡한 문제에 직면하더라도 이 문서는 문제를 효과적으로 해결하는 데 도움이 될 수 있습니다. 일반적인 문제 해결 팁 특정 문제 해결 단계를 진행하기 전에 다음은 몇 가지 유용한 정보입니다.

jQuery.val()을 사용할 수 없는 문제를 해결하려면 구체적인 코드 예제가 필요합니다. 프론트 엔드 개발자에게는 jQuery를 사용하는 것이 일반적인 작업 중 하나입니다. 그중에서도 .val() 메서드를 사용하여 양식 요소의 값을 가져오거나 설정하는 것은 매우 일반적인 작업입니다. 그러나 특정한 경우에는 .val() 메서드를 사용하지 못하는 문제가 발생할 수 있습니다. 이 문서에서는 몇 가지 일반적인 상황과 해결 방법을 소개하고 구체적인 코드 예제를 제공합니다. 문제 설명 jQuery를 사용하여 프런트 엔드 페이지를 개발할 때 때때로 다음과 같은 문제가 발생할 수 있습니다.

Yulong 8 Wine Master 시험과 관련된 질문은 무엇입니까? 이에 해당하는 대답은 무엇입니까? 시험에 빨리 합격하는 방법은 무엇입니까? Master of Wine 시험 활동에는 답변해야 할 질문이 많이 있으며, 답변을 참조하여 문제를 해결할 수 있습니다. 이 질문들은 모두 와인에 대한 지식과 관련이 있습니다. 참고가 필요하다면 Yakuza 8 Wine Master 시험 문제에 대한 답변의 자세한 분석을 살펴 보겠습니다! Rulong 8 Wine Master 시험 문제에 대한 자세한 설명 1. "와인"에 관한 질문. 하와이 왕족이 설립한 증류소에서 생산되는 증류주로, 하와이에서 대량으로 재배되는 사탕수수의 설탕을 원료로 만들어집니다. 이 와인의 이름은 무엇입니까? 답: 럼 2. "와인"에 관한 질문입니다. 사진은 건조 인삼과 건조 버무스로 만든 음료를 보여줍니다. 올리브를 첨가한 것이 특징이며 "코크니"로 알려져 있습니다.

많은 사용자가 win11 시스템 업데이트를 시도했지만 업데이트 후에 시작 메뉴를 사용할 수 없다는 사실을 발견했습니다. 이는 최신 업데이트에 문제가 있기 때문일 수 있습니다. Microsoft가 문제를 해결하기 위해 이러한 업데이트를 수정하거나 제거할 때까지 기다릴 수 있습니다. 문제를 함께 살펴보겠습니다. win11을 설치한 후 시작 메뉴를 사용할 수 없는 경우 해결 방법 방법 1: 1. 먼저 win11에서 제어판을 엽니다. 2. 그런 다음 프로그램 아래에 있는 "프로그램 제거" 버튼을 클릭합니다. 3. 제거 인터페이스에 들어가서 왼쪽 상단에 있는 "설치된 업데이트 보기"를 찾으세요. 4. 들어간 후에는 업데이트 정보에서 업데이트 시간을 확인하고 모든 최신 업데이트를 제거할 수 있습니다. 방법 2: 1. 또한 업데이트 없이 win11 시스템을 직접 다운로드할 수도 있습니다. 2. 이 제품은 가장 없는 제품입니다.

Wuhua Mixin은 2월 28일에 브레이킹 테스트를 실시할 것이라고 확인했습니다. 이번에는 이전 테스트에 참여한 적이 있는지, 이번에 자격이 있는지, 시작과 끝이 무엇인지 등 브레이킹 테스트의 일반적인 문제를 주로 해결할 것입니다. 테스트, 사전 다운로드 시간은 무엇인지, 지원되는 기기 플랫폼과 기타 콘텐츠를 살펴보겠습니다. Wuhuami의 새로운 획기적인 테스트에 대해 자주 묻는 질문: 2월 28일, 여러분의 도착을 기대합니다! 1. "브레이킹 테스트"의 성격은 무엇입니까? 이 테스트는 Android에 대한 제한된 과금 및 파일 삭제 테스트입니다. 테스트 후에는 이 테스트의 게임 데이터가 삭제됩니다. 2. "오프닝 테스트" 또는 "입문 테스트"에 참가한 적이 있습니까? 이번에 "오프닝 테스트" 또는 "입문 테스트"에 참가할 수 있는 자격이 있습니까? 아래 QR코드를 스캔하여 " 클로즈베타에 참여해주신 플레이어분들께"로 이동해주세요.

DockerCompose, Nginx 및 MariaDB 모범 사례: 배포된 PHP 애플리케이션의 모니터링 및 최적화 소개: 최신 애플리케이션 개발에서 컨테이너화는 애플리케이션을 더 잘 관리하고 배포하는 데 도움이 되는 인기 있는 방법이 되었습니다. DockerCompose는 여러 컨테이너를 정의하고 실행하기 위한 도구로, 애플리케이션 배포 및 관리 프로세스를 단순화합니다. 이 기사에서는 DockerCompose를 사용하여 Nginx와 결합하는 방법을 소개합니다.

Apple의 iOS 17 소프트웨어 업데이트는 새로운 iPhone 15 및 iPhone 15 Pro 시리즈 스마트폰과 함께 출시되었습니다. iOS 17은 Apple 모바일 운영 체제의 새로운 주요 버전이며, 다른 새로운 소프트웨어와 마찬가지로 문제가 없는 것은 아닙니다. 사용자가 보고한 가장 일반적인 문제는 다음과 같습니다. 설치 및 업데이트 문제: 일부 사용자는 iOS 17을 다운로드하고 설치하는 데 문제가 있거나 업데이트 후 장치가 부팅 루프에 갇히는 문제를 보고했습니다. 배터리 소비: iOS17은 특히 이전 장치에서 이전 버전의 운영 체제보다 더 많은 전력을 소비하는 것으로 알려져 있습니다. 앱 충돌 및 정지: 일부 사용자는 iOS 17로 업데이트한 후 앱이 더 자주 충돌하거나 정지된다고 보고했습니다. 성능 문제: 일부 사용자가 보고함
