Innodb三大特性之double write_MySQL
1、doublewrite buffer(mysql官方的介绍)
InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous area called the doublewrite buffer. Only after the write and the flush to the doublewrite buffer have completed, does InnoDB write the pages to their proper positions in the data file. If there is an operating system, storage subsystem, or mysqld process crash in the middle of a page write, InnoDB can later find a good copy of the page from the doublewrite buffer during crash recovery.
Although data is always written twice, the doublewrite buffer does not require twice as much I/O overhead or twice as many I/O operations. Data is written to the buffer itself as a large sequential chunk, with a single fsync() call to the operating system.
To turn off the doublewrite buffer, specify the option innodb_doublewrite=0.
2、partial page write
InnoDB 的Page Size一般是16KB,其数据校验也是针对这16KB来计算的,将数据写入到磁盘是以Page为单位进行操作的。而计算机硬件和操作系统,在极端情况下 (比如断电)往往并不能保证这一操作的原子性,16K的数据,写入4K 时,发生了系统断电/os crash ,只有一部分写是成功的,这种情况下就是 partial page write 问题。
很多DBA 会想到系统恢复后,MySQL 可以根据redo log 进行恢复,而mysql在恢复的过程中是检查page的checksum,checksum就是pgae的最后事务号,发生partial page write 问题时,page已经损坏,找不到该page中的事务号,就无法恢复
所以说,当page 损坏之后,其实应用redo是没有意义的,这时候无法使用redo来恢复,因为原始页已经损坏了,会发生数据丢失。
3、doublewrite
在InnoDB将BP中的Dirty Page刷(flush)到磁盘上时,首先会将(memcpy函数)Page刷到InnoDB tablespace的一个区域中,我们称该区域为Double write Buffer(大小为2MB,每次写入1MB)。在向Double write Buffer写入成功后,第二步、再将数据拷贝到数据文件对应的位置。
当第二步过程中发生故障,也就是发生partial page write的问题。恢复的时候先检查页内的checksum是否相同,不一致,则直接从doublewrite中恢复。
1)如果写dw buffer失败。那么这些数据不会写到磁盘,innodb会载入磁盘原始数据和redo日志比较,并重新刷到dw buffer。
2)如果写dw buffer成功,但是刷新到磁盘失败,那么innodb就不会通过事务日志来恢复了,而是直接刷新dw buffer中的数据。
4、对性能的影响
系统需要将数据写两份,一般认为,Double Write是会降低系统性能的。peter猜测可能会有5-10%的性能损失,但是因为实现了数据的一致,是值得的。Mark Callaghan认为这应该是存储层面应该解决的问题,放在数据库层面无疑是牺牲了很多性能的。
事实上,Double Write对性能影响并没有你想象(写两遍性能应该降低了50%吧?)的那么大。在BP中一次性往往会有很多的Dirty Page同时被flush,Double Write则把这些写操作,由随机写转化为了顺序写。而在Double Write的第二个阶段,因为Double Write Buffer中积累了很多Dirty Page,所以向真正的数据文件中写数据的时候,可能有很多写操作可以合并,这样有可能会降低Fsync的调用次数。
基于上面的原因,Double Write并没有想象的那么糟。另外,Dimitri在测试后,发现打开和关闭Double Write对效率的影响并不大。
5、doublewrite参数
mysql> show variables like "%double%"; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | innodb_doublewrite | ON | +--------------------+-------+ 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE "%innodb_dblwr%"; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | Innodb_dblwr_pages_written | 447 | | Innodb_dblwr_writes | 38 | +----------------------------+-------+ 2 rows in set (0.00 sec)
从上面可以看出, Flush了447次到doublewrite buffer中,写文件共38次,则每次write合并了447/38次flush

핫 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)

뜨거운 주제











Win7 Ultimate 버전, Win7 Professional 버전, Win7 Home 버전 등과 같은 Win7 시스템 버전이 많다는 것은 누구나 알고 있습니다. 많은 사용자가 Home 버전과 Ultimate 버전 사이에서 얽혀 어떤 버전을 선택해야 할지 모릅니다. 그래서 오늘은 Win7 Family Meal과 Win7 Ultimate의 차이점에 대해 말씀드리겠습니다. 1. Different Home Basic Edition을 경험해 보세요. 일상적인 작업을 더 빠르고 간단하게 만들어 가장 자주 사용하는 프로그램과 문서에 더 빠르고 편리하게 액세스할 수 있습니다. Home Premium은 좋아하는 TV 프로그램, 사진, 비디오 및 음악을 쉽게 즐기고 공유할 수 있는 최고의 엔터테인먼트 경험을 제공합니다. Ultimate Edition은 각 에디션의 모든 기능을 통합하고 Windows 7 Home Premium의 모든 엔터테인먼트 기능과 전문 기능을 갖추고 있습니다.

SpringMVC의 주요 기능 이해: 이러한 중요한 개념을 익히려면 특정 코드 예제가 필요합니다. SpringMVC는 개발자가 MVC(Model-View-Controller) 아키텍처 패턴을 통해 유연하고 확장 가능한 구조를 구축하는 데 도움이 되는 Java 기반 웹 애플리케이션 개발 프레임워크입니다. 웹 애플리케이션. SpringMVC의 주요 기능을 이해하고 익히면 웹 애플리케이션을 보다 효율적으로 개발하고 관리할 수 있습니다. 이 기사에서는 SpringMVC의 몇 가지 중요한 개념을 소개합니다.

Golang(Go 언어)에는 전통적인 의미의 클래스 개념이 없지만, 클래스와 유사한 객체지향 기능을 구현할 수 있는 구조체라는 데이터 형식을 제공합니다. 이 기사에서는 구조를 사용하여 객체 지향 기능을 구현하는 방법을 설명하고 특정 코드 예제를 제공합니다. 구조의 정의와 사용법 먼저 구조의 정의와 사용법을 살펴보자. Golang에서는 type 키워드를 통해 구조를 정의한 다음 필요한 곳에 사용할 수 있습니다. 구조에는 속성이 포함될 수 있습니다.

인터넷의 급속한 발전으로 프로그래밍 언어는 끊임없이 진화하고 업데이트되고 있습니다. 그 중 오픈소스 프로그래밍 언어인 Go 언어는 최근 몇 년간 많은 주목을 받고 있습니다. Go 언어는 간단하고 효율적이며 안전하고 개발 및 배포가 용이하도록 설계되었습니다. 높은 동시성, 빠른 컴파일, 메모리 안전성 등의 특징을 갖고 있어 웹 개발, 클라우드 컴퓨팅, 빅데이터 등 분야에서 널리 사용됩니다. 그러나 현재 다양한 버전의 Go 언어를 사용할 수 있습니다. 적합한 Go 언어 버전을 선택할 때 요구 사항과 기능을 모두 고려해야 합니다. 머리

5G의 세 가지 특징은 다음과 같습니다. 1. 고속, 실제 응용 분야에서 5G 네트워크의 속도는 4G 네트워크의 10배 이상입니다. 2. 낮은 대기 시간: 5G 네트워크의 대기 시간은 약 수십 밀리초로 인간의 반응 속도보다 빠릅니다. 3. 폭넓은 연결성, 5G 네트워크의 출현은 다른 기술과 결합하여 만물인터넷(Internet of Everything)의 새로운 장면을 창출할 것입니다.

C++ 함수에는 단순 함수, const 함수, 정적 함수 및 가상 함수 유형이 있습니다. 기능에는 인라인 함수, 기본 매개변수, 참조 반환 및 오버로드된 함수가 포함됩니다. 예를 들어,calculateArea 함수는 π를 사용하여 주어진 반경의 원의 면적을 계산하고 이를 출력으로 반환합니다.

Java의 특징은 다음과 같습니다. 1. 간단하고 배우기 쉽습니다. 2. 코드를 더 쉽게 재사용하고 유지 관리할 수 있습니다. 3. 플랫폼 독립적이며 다양한 운영 체제에서 실행 가능합니다. 4. 자동 가비지를 통한 메모리 관리 수집 메커니즘 메모리 관리 5. 변수는 사용하기 전에 해당 유형을 선언해야 합니다. 6. 악성 코드의 무단 액세스 및 실행을 방지할 수 있는 보안. 8. 예외 처리를 통해 프로그램 충돌을 방지할 수 있습니다. 9. 다수의 개발 라이브러리 및 프레임워크 10. 오픈 소스 생태계.

LinuxGem은 컴퓨터 분야에서 흔히 사용되는 용어로, Linux 운영 체제에서 잘 작동하는 소프트웨어나 응용 프로그램을 의미합니다. Linux 운영 체제 자체는 많은 개발자와 커뮤니티의 지원을 받는 오픈 소스 운영 체제이므로 Linux에서 고품질의 강력한 소프트웨어를 쉽게 찾을 수 있습니다. 그러나 이렇게 많은 고품질 소프트웨어 중에서도 뛰어난 디자인, 성능, 기능으로 Linux에서 인기가 높은 "LinuxGem"이라는 소프트웨어가 여전히 있습니다.
