suchen
HeimDatenbankMySQL-TutorialPercona对MySQL标准版本的改进

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/percona_vs_mysql.html 周末有空读了下Percona XtraDB对MySQL InnoDB的改进点,这里给大家分享下。 一、对可

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/percona_vs_mysql.html

周末有空读了下Percona XtraDB对MySQL InnoDB的改进点,这里给大家分享下。

一、对可扩展性的改进:
1. 提升Buffer Pool的扩展性
InnoDB Buffer Pool一个众所周知的问题是大并发查询执行的争用,XtraDB将Buffer Pool的全局Mutex拆成了多个Mutex以减少争用。

2. 提高InnoDB IO扩展性
XtraDB增加了许多变量去调整IO到最佳状态,包括调整checkpoint、后台读写数据文件线程数等等的参数。

3. 多个回滚段
为提供一直读,InnoDB将事务修改的数据写到回滚段。回滚段被一个独立的Mutex保护,这直接导致了写密集型的工作并发不高。在 XtraDB可以改变回滚段的数目(innodb_extra_rsegments),在写密集型操作中可以大幅度提高性能。

4. 可以更高的并发数
InnoDB在回滚段只提供了1024个回滚槽(春哥就遇到过这个瓶颈),如果回滚槽用完,新的事务将不能开始,直到有回滚槽被释放。

二、性能上的提升
1. 专用的Purge线程
在InnoDB一个事务修改的数据被写到共享表空间的undo space,所以InnoDB能提供读一致。到一个事务结束了,undo space的相应区域被释放。但是如果有很多事务,Purge线程清理空间不够快,共享表空间将急剧增长(BRMMS共享表空间巨大应该是这个原因)。这 将导致性能严重下降,甚至可能用完所有的磁盘空间。XtraDB使用了一个专用的线程来清理undo space,这对undo space的清理速度可以提升很多。尽管这可能使整体的性能降低,但是可以大大提高稳定性,因而整体性能略微降低是值得的。

2. 可配置的Doublewrite缓冲
InnoDB使用了double write功能来防止数据损坏,double write的意思是,是写数据到文件前,先顺序写到到共享表空间。如果遇到一个损坏的写,InnoDB将使用这个buffer去恢复数据。尽管数据被写了 两次但对性能影响通常较小,但是在一些高负载环境,doublewrite就成了瓶颈。XtraDB提供了一个选项将doublewrite buffer放在一个独立的磁盘来提升并发性能。

3. Query Cache增强
Percona提供了额外的参数来配置Query Cache,例如忽略SQL中的注释性语句来检查是否可以命中。

4. Fast InnoDB Checksum
InnoDB可以checksum所有从磁盘上读取的页,以提供防止数据损坏的额外安全保障。在XtraDB中,Percona改进算了 checksum算法,可以提供更好的性能。

5. 删除过多的函数调用
当MySQL从socket读数据时,将产生很多fcntl(针对描述符提供控制的函数)调用,导致并发性能下降。Percona移出了多于 的调用。

6. 减少了Buffer Pool Mutex竞争
在InnoDB内核操作时减少了Buffer Pool之间的Mutex争用(拆分Mutex变量)

三、灵活性改进
1. 支持多种页大小
尽管InnoDB支持多种页大小,但是默认的页大小16K无法在不重新编译的情况下改变。XtraDB提供一个系统变量 (innodb_page_size)来改变这个值。更小的页大小可以提升大多数OLTP系统的工作性能,更大的页通常可以提供更好的 OLAP性能。

2. 禁止Replication警告
默认的基于Statement的复制,例如NOW(),RAND(),call存储过程/函数等一些语句,或者UPDATE没有ORDER BY而使用LIMIT,可能是不安全的。在这种情况下,MySQL会发出1592警告(声明语句在Statement日志下是不安全的)。不 幸的是,MySQL 5.1的一个Bug导致Server发出这个警告在一些安全的情况下。索然他不会导致任何与复制相关的问题,但是这会导致Error Log里面存在没必要的报警。这个改进可以避免这些警告。

3. 处理BLOB中的行结束符
Percona(5.1.x-12.x开始,5.1.x-11.x不支持)为MySQL客户端提供一个新的选项(no-remove- eol-carret)来处理Blob字段含\r字符的情况。

4. 复制停止恢复
当使用sql_slave_skip_counter参数时,如果一个事件组的中间某条出错了,slave将跳过所有剩余的时间操作直到这个 事件组结束。表述比较困难,直接看Percona给的使用例子就明白了。
http://www.percona.com/docs/wiki/percona-server:features:replication_skip_single_statement

5. 可固定的预读区
在InnoDB中,预读(read-ahead区域)的大小是动态计算的,但是它经常是一个同样的值。XtraDB(5.1.x-12.x开 始,5.1.x-11.x不支持)可以让这个这个区域的大小固定,避免无用的计算。
这是Facebook放出的补丁:http://bazaar.launchpad.net/~mysqlatfacebook/mysqlatfacebook/5.1/revision/3538

四、可靠性的改进
1. Crash后同步日志
在InnoDB中,slave复制状态存储在两个不同步的文件中(relay.index和relay.info)。如果slave因为错误 状态而停止,文件将不同步,最后的事务将重新执行。Percona在XtraDB事务日志中增加了复制状态:当重启事务时,slave可以使 用这个信息来实现一致性。
来自Google的补丁:http://code.google.com/p/google-mysql-tools/wiki/TransactionalReplication
这个缺陷可能导致的Bug:http://bugs.mysql.com/bug.php?id=34058

2. Too Many Connections的警告
Percona将“Too Many Connections”这个警告写入Server端的error_log,而不只是客户端报这个错。

3. 错误代码的兼容性
Percona(5.1.x-12.x开始,5.1.x-11.x不支持)提供与MySQL 5.5错误代码的兼容性,避免因为升级到5.5而带来错误码不一样的问题。

4. 文件句柄损坏的表(InnoDB)
MySQL在InnoDB有表损坏之后,所有的InnoDB表都不可用。XtraDB改进了这一点,只是disable损坏的表,数据库依然 可以使用其他的表,损坏的表被锁定。

五、可管理性的提升
1. Fast InnoDB Recovery
InnoDB一直以来有个很麻烦的事情,在crash后回复InnoDB的表非常的缓慢。Percona/XtraDB因为是基于 InnoDB Plugin 1.0.8+的,也具备InnoDB Plugin快速恢复的功能。(早期的Percona版本也能看到XtraDB恢复速度比InnoDB快很多,因为XtraDB早期使用了自己开发的 Fast Revcovery)
一些测试:http://www.mysqlperformanceblog.com/2009/07/07/improving-innodb-recovery-time/

2. InnoDB 数据字段大小限制
InnoDB在自己的表缓存(Table Cache)中分配存储表定义(Table Definitions)的内存称为数据字典。默认情况下,一旦打开表,字典中表示它的内部对象将一直保存在内存中,直到表被删除或者服务器重启。如果存 在很多表(例如 10万张或更多,Dubbo就有这种情况,logstat库),可能导致消耗巨大的内存有时可能达到G级别。Percona修改了这种策略,可以设置参数 (innodb_dict_size_limit)来限制数据字典的大小,使InnoDB使用LRU算法来限制数据字典大小,而不是一直存在 内存中,避免因为表太多而内存耗尽。

3. 展开表导入
InnoDB不像MyISAM那样可以在服务器之间拷贝单表定义文件。如果配合Xtrabackup导出,一张表可以在另一个XtraDB导 入。

4. Buffer Pool使用共享内存
当Buffer Pool非常大时,重启后Warn up需要大量磁盘读写,这会消耗很多时间。通过将Buffer Pool存储在Shared Memory中,这些非是耗时的IO将会节省掉。主机重启就没办法了,得用下面的功能。

5. 导出/恢复Buffer Pool
对于使用了很大Buffer Pool的InnoDB,重启数据库很痛苦。通常需要InnoDB Buffer Pool先Warn Up再提供服务,这可能需要很久。XtraDB(5.1.x-12.x开始,5.1.x-11.x不支持)提供了命令可以把Buffer Pool的内容导入或导出,从而可以提高重启提供服务的速度。
使用方法:http://www.percona.com/docs/wiki/percona-server:features:innodb_lru_dump_restore?redirect=1

6. Fast Index Creation
快速索引创建是InnoDB Plugin的功能,只要不是主键变动,修改索引的速度比之前快很多。但是在一些场景下,这可能导致损坏。XtraDB提供参数 (innodb_fast_index_creation)来选择Fast Index Creation功能是否启用,如果关闭,则使用原来的创建方法。

7. Fast Index Renaming
XtraDB((5.1.x-12.x开始,5.1.x-11.x不支持))扩展了ALTER TABLE命令,提供在线重命名索引功能,这样不会导致重建索引。(这对我们调整不规范索引名称非常有用)

8. 防止缓存Flashcache
Flashcache通过在SSD上缓存数据来提升性能。它工作时应该让更热的数据缓存才能能提高更好的性能,XtraDB提供了注释提示来 忽略不必缓存的数据。

六、诊断问题方面的提升
1. 额外的INFORMATION_SCHEMA表
Percona/XtraDB提供额外的INFORMATION_SCHEMA表以获得数据库内部更详尽的信息,例如内部缓冲池的内容或统计 信息。

2. 慢查日志扩展
Percona提供了额外的统计数据,可以通过参数启用。它可以帮助我们捕捉需要的事件尽可能详细的信息,简化了慢查分析的难度。

3. InnoDB状态显示
XtraDB整理了InnoDB Status的显示量,提供更好的可读性,状态由24个上升到48个,并且打印了被内部哈希表使用的内存量。通过新的参数可以配置的输出。

4. 计算InnoDB死锁数
当运行一饿事务性的应用程序,总会不同程度的出现死锁,只要不经常出现这并不是大的问题。InnoDB中Show InnoDB Status命令只给出了最后一次死锁额信息,当我们需要知道总的死锁数或一个单位时间的死锁量这里并不能给出。XtraDB增加了一个保存死锁量的状态 变量,通过这个变量可以更好的了解我们数据库上发生的死锁。

5. 可以记录所有Server端命令(syslog)
Percona可以在syslog中记录所有运行在Server端的命令。

6. 响应时间分布
Percona提供了一份报告表明在一定间隔内在服务器上执行Query数。这个信息可以用于监控数据库性能是否稳定。

7. Show Storage Engines
Percona改变了Show Storage Egnines的输出,以表名XtraDB是不是启用。(以前XtraDB也使用InnoDB的名称输出)

8. Query Cache Mutex状态
Query Cache可能导致一些很难被检测出来的问题,Percona修改了show processlist命令,可以输出“Waiting on query cache mutex”状态。

9. 显示锁名称
“show mutex status”命令可以显示当前发生的锁定名称和os_wait值。

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Wann sollten Sie einen zusammengesetzten Index gegenüber mehreren Einspaltindizes verwenden?Wann sollten Sie einen zusammengesetzten Index gegenüber mehreren Einspaltindizes verwenden?Apr 11, 2025 am 12:06 AM

In der Datenbankoptimierung sollten Indexierungsstrategien gemäß Abfrageanforderungen ausgewählt werden: 1. Wenn die Abfrage mehrere Spalten beinhaltet und die Reihenfolge der Bedingungen festgelegt ist, verwenden Sie zusammengesetzte Indizes. 2. Wenn die Abfrage mehrere Spalten beinhaltet, aber die Reihenfolge der Bedingungen nicht festgelegt ist, verwenden Sie mehrere einspaltige Indizes. Zusammengesetzte Indizes eignen sich zur Optimierung von Multi-Säulen-Abfragen, während Einspaltindizes für Einspalten-Abfragen geeignet sind.

Wie identifizieren und optimieren Sie langsame Abfragen in MySQL? (Langsames Abfrageprotokoll, Performance_schema)Wie identifizieren und optimieren Sie langsame Abfragen in MySQL? (Langsames Abfrageprotokoll, Performance_schema)Apr 10, 2025 am 09:36 AM

Um die MySQL -Abfrage zu optimieren, müssen SlowQuerylog und Performance_Schema verwendet werden: 1. Aktivieren Sie SlowQuerylog und setzen Sie Schwellenwerte, um langsame Abfragen aufzuzeichnen; 2. Verwenden Sie Performance_Schema, um die Details zur Ausführung von Abfragen zu analysieren, Leistungs Engpässe zu finden und zu optimieren.

MySQL und SQL: Wesentliche Fähigkeiten für EntwicklerMySQL und SQL: Wesentliche Fähigkeiten für EntwicklerApr 10, 2025 am 09:30 AM

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Beschreiben Sie den asynchronen Master-Slave-Replikationsprozess von MySQL.Beschreiben Sie den asynchronen Master-Slave-Replikationsprozess von MySQL.Apr 10, 2025 am 09:30 AM

MySQL Asynchronous Master-Slave-Replikation ermöglicht die Datensynchronisation durch Binlog, die die Leseleistung und die hohe Verfügbarkeit verbessert. 1) Der Master -Server -Datensatz ändert sich am Binlog; 2) Der Slave -Server liest Binlog über E/A -Threads; 3) Der Server -SQL -Thread wendet BinLog an, um Daten zu synchronisieren.

MySQL: Einfache Konzepte für einfaches LernenMySQL: Einfache Konzepte für einfaches LernenApr 10, 2025 am 09:29 AM

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

MySQL: Eine benutzerfreundliche Einführung in DatenbankenMySQL: Eine benutzerfreundliche Einführung in DatenbankenApr 10, 2025 am 09:27 AM

Die Installation und die grundlegenden Vorgänge von MySQL umfassen: 1. MySQL herunterladen und installieren, das Stammbenutzerkennwort festlegen. 2. Verwenden Sie SQL -Befehle, um Datenbanken und Tabellen zu erstellen, wie z. 3. Ausführen von CRUD -Operationen, verwenden Sie Einfügen, auswählen, aktualisieren, Befehle löschen; 4. Erstellen Sie Indizes und gespeicherte Verfahren, um die Leistung zu optimieren und komplexe Logik zu implementieren. Mit diesen Schritten können Sie MySQL -Datenbanken von Grund auf neu erstellen und verwalten.

Wie funktioniert der InnoDB Puffer Pool und warum ist es für die Leistung von entscheidender Bedeutung?Wie funktioniert der InnoDB Puffer Pool und warum ist es für die Leistung von entscheidender Bedeutung?Apr 09, 2025 am 12:12 AM

InnoDbbufferpool verbessert die Leistung von MySQL -Datenbanken durch das Laden von Daten und Indexseiten in den Speicher. 1) Die Datenseite wird in das Bufferpool geladen, um die Festplatten -E/A zu reduzieren. 2) Schmutzige Seiten sind regelmäßig markiert und auf der Festplatte aktualisiert. 3) LRU -Algorithmusverwaltungsdatenseite Eliminierung. 4) Der Lese-Out-Mechanismus lädt die möglichen Datenseiten im Voraus.

MySQL: Die einfache Datenverwaltung für AnfängerMySQL: Die einfache Datenverwaltung für AnfängerApr 09, 2025 am 12:07 AM

MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.