MySQL Performance Tuning



Ähnliche Dokumente
Performance Tuning & Scale-Out mit MySQL

MySQL Performance Tuning für Entwickler

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

MySQL Cluster mit Galera

Verwendung des Terminalservers der MUG

PostgreSQL in großen Installationen

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

MySQL Performance: Getting Started InnoDB

SAP Memory Tuning. Erfahrungsbericht Fritz Egger GmbH & Co OG. Datenbanken sind unsere Welt

MailUtilities: Remote Deployment - Einführung

Formular»Fragenkatalog BIM-Server«

Anti-Botnet-Beratungszentrum. Windows XP in fünf Schritten absichern

Professionelle Seminare im Bereich MS-Office

PostgreSQL Hardware und RAM Tuning

Installation SQL- Server 2012 Single Node

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

4D Server v12 64-bit Version BETA VERSION

Updatehinweise für die Version forma 5.5.5

Abschluss Version 1.0

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Upgrade von Windows Vista auf Windows 7

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

Elexis-BlueEvidence-Connector

OP-LOG

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Partitionieren in Vista und Windows 7/8

SQL und MySQL. Kristian Köhntopp

Anleitung zur Nutzung des SharePort Utility

Urs Meier Art der Info Technical Info (Februar 2002) Aus unserer Projekterfahrung und Forschung

ICS-Addin. Benutzerhandbuch. Version: 1.0

Stammdaten Auftragserfassung Produktionsbearbeitung Bestellwesen Cloud Computing

Spotlight 5 Gründe für die Sicherung auf NAS-Geräten

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Installationsanleitung dateiagent Pro

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

QUICK INSTALLATION GUIDE

TeamSpeak3 Einrichten

mit dem TeXnicCenter von Andreas Both

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Samsung Large Format Display

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

Installieren Sie den Janaserver auf dem Schulserver oder dem Lehrerrechner.

Speicher in der Cloud

Prozessarchitektur einer Oracle-Instanz

Betriebshandbuch. MyInTouch Import Tool

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Synchronisations- Assistent

Windows 10 > Fragen über Fragen

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken

Outlook-Daten komplett sichern

Datenübernahme easyjob 3.0 zu easyjob 4.0

Avira Management Console Optimierung für großes Netzwerk. Kurzanleitung

Eigenen WSUS Server mit dem UNI WSUS Server Synchronisieren

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Zeiterfassung-Konnektor Handbuch

Eigene Dokumente, Fotos, Bilder etc. sichern

Konfiguration Datenbank-Parameter

Datensicherheit und Hochverfügbarkeit

Anwendungshinweis Nr. 12. Wie konfiguriere ich redundante Serververbindungen

Avira Server Security Produktupdates. Best Practice

Herzlich Willkommen bei der nfon GmbH

Lizenzen auschecken. Was ist zu tun?

Hinweise zur Installation von MySQL

Kommunikationsübersicht XIMA FORMCYCLE Inhaltsverzeichnis

SharePoint Demonstration

Enigmail Konfiguration

Datensicherung. Beschreibung der Datensicherung

Windows Server 2008 (R2): Anwendungsplattform

Die Backup-Voreinstellungen finden Sie in M-System Server unter dem Reiter "Wartung".

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Internet online Update (Internet Explorer)

Urlaubsregel in David

Ziel: Abfrage von Vorwissen oder Überprüfung des vermittelten Wissens. Teilweise sind Mehrfachnennungen möglich.

Informatik 12 Datenbanken SQL-Einführung

Übung: Verwendung von Java-Threads

Oracle VirtualBox. Zum Herunterladen für alle Betriebssysteme gibt s die VirtualBox auf:

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen

Konfiguration Serverstart Server einrichten. MySQL 4, 5. Kapitel 03: Serverstart und -konfiguration. Marcel Noe

SJ OFFICE - Update 3.0

ISA Server Best Practice Analyzer

Workshop: Eigenes Image ohne VMware-Programme erstellen

TECHNISCHE INFORMATION LESSOR LOHN/GEHALT BEITRAGSNACHWEIS-AUSGLEICH BUCH.-BLATT MICROSOFT DYNAMICS NAV

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Tutorial -

Installation OMNIKEY 3121 USB

Installationsanleitung WSCAD Elektrohandwerk

3 Windows als Storage-Zentrale

Wie optimiert man die Werbungserkennung von Ad- Detective?

Die allerwichtigsten Raid Systeme

Die Dateiablage Der Weg zur Dateiablage

Transkript:

MySQL Performance Tuning Kristian Köhntopp, Senior Consultant, MySQL GmBH <kris@mysql.com> http://blog.koehntopp.de http://mysqldump.azundris.com Handy aus? 1

Performance und Warteschlangen Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 2

Was ist Performance Systemauslastung herstellen Wenn das System ausgelastet ist und man dennoch mehr Leistung braucht, dann ist Scalability gefragt Metriken: Latenz (Die Antwort soll möglichst schnell da sein) Durchsatz (Es sollen möglichst viele Antworten pro Zeit geliefert werden) Skalierbarkeit (Beibehaltung der Latenz bei Erhöhung der Parallelität) 3

Sättigung (Durchsatz nach Last) Durchsatz Investitionen Wo liegt dieser Punkt? Was ist der Grund für die Sättigung? Systemlast 4

Sättigung (Latenz nach Last) Latenz Wartezeit Arbeitszeit Last 5

Sättigung (Auslastung über Zeit) Ressource Zeit 6

Latenz = Wartezeit + Bearbeitungszeit Telefonzelle: Alle drei Minuten trifft ein Kunde ein Ein Gespräch dauert im Schnitt etwa drei Minuten Die Schlange wächst und wächst. Wieso? Systemverhalten am Sättigungspunkt ist nicht linear! Das System stirbt an Wartezeit. Wer wartet wann worauf? Warteschlangentheorie Kürzere Verarbeitungszeit Parallelisierung Latenz Load 7

Servicezeit/Wartezeit Die wichtigste Frage: Womit verbrennen wir Zeit? Festplatte, Locks, Netzwerk, CPU... Direkte Messung Summierung aller Abfrage-Zeiten von Internetseiten Indirekte Messungen Performancecounter SHOW GLOBAL STATUS, SHOW MUTEX STATUS, SHOW FULL PROCESSLIST Profiling oprofile, gprof System-Instrumentation iostat, vmstat, sar, dstat, dtrace 8

Also wie viel jetzt? Hardware definiert die erreichbaren Leistungsgrenzen RAM: Access Time im ns (10-9 ) Bereich, Granularität 1 Byte Disk: Access Time in ms (10-3 ) Bereich, Granularität 1 KB RAM ist 1 000 bis 10 000 mal schneller als eine Platte. Speicher gut. Mehr Speicher besser. Seek: Eine Platte liefert zwischen 125 und 200 Seeks/s. Ein Row Access kann im schlimmsten Fall mehrere Seeks kosten. Scan: Eine Platte liefert bis zu 50 MB/sec an Daten. Das sind ca. 100 000 Rows/sec. 9

Richtig benchmarken Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 10

Benchmarks Anwendungsgebiete: Den zu messenden Systemzustand gezielt herstellen Vergleichszahlen generieren um Fortschritt zu vergleichen Aussagekräftige Benchmarks sind nicht leicht: Tatsächliche Systemlast muß genau reproduziert werden Die Ergebnisse müssen korrekt gelesen werden 11

Typische Fehler Falsche Datenmenge (1GB statt 100 GB) Kleine Datenmenge paßt in den Cache, System ist mit Speicher gesättigt. Falsche Locality (Gleichverteilung statt long tail ) Test mit dem Postleitzahlen 7xxxx, Abfragen nach Postleitzahlbereichen sind immer wahr oder falsch Alle Titel im Buchladen werden gleich häufig bestellt, es gibt keinen Harry Potter Falsche Concurrency (1 Thread statt 500 Threads) So kann man keine Locks erzeugen Falsches Locking (keine Think Times statt Denkpausen) So erzeugt man haufenweise Locks 12

Richtig Benchmarken Was soll erreicht werden? Konfiguration reproduzierbar machen, Ergebnisse sichern Schema Dump, my.cnf, Konfiguration des Lastgenerators Hardware/OS Konfigurationsdateien wenn benötigt Meßwerte Ein Problem zur Zeit bearbeiten Nur eine Änderung zur Zeit testen Mit warmen Caches testen Welche Caches testen wir? (Application Caches, Query Cache, Key Cache, OS Buffer Cache, Controllercache) 13

Ansatzpunkte für Optimierungen Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 14

Architektur Datenbanken traditionell: Garantierte Korrektheit 2PC ACID Jedes asynchrone System kann durch Einführen von Waits in ein synchrones System umgewandelt werden. Best Effort Ansatz siehe TCP/IP Behandle die Fehlerfälle nicht, sondern eskaliere sie zur nächsthöheren Schicht. Konzentration auf die Optimierung der häufigen Fälle 15

Asynchrone Systeme Vertikal Skalieren Kauf größerer Rechner mit mehr CPUs Bau eng gekoppelter Systeme, die traditionelle Datenbankparadigmen umsetzen Horizontal Skalieren Kauf vieler kleiner Systeme Bau lose gekoppelter Systeme, die Fehler akzeptieren und eskalieren 16

Schema Design Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 17

OLTP: Normalisierte Schemata Vorteilhaft für OLTP-Anwendungen Transaktionen viele Schreiboperationen Minderung von Redundanz Weniger Speicherverbrauch Viele Joins (kann teuer werden) Viele Indices Gezielte Denormalisierungen Trigger, die Aggregate pflegen Saubere Übersetzung in E/R Diagramm wird ermöglicht 18

OLAP: Denormalisierte Schemata DWH/OLAP, Berichtserstellung Historisch korrekte Daten: Nicht der aktuelle Preis interessiert, sondern der damalige Verkaufspreis Nicht die aktuelle Kundenanschrift interessiert, sondern die PLZ der damaligen Lieferadresse Keine Joins mehr: Übergang vom Seek zum Scan DWH NormalStandardformen: Star Snowflake 19

Schema Design - Datentypen Kleinere Datentypen: Weniger Blöcke INTEGER statt DECIMAL UNSIGNED wo immer möglich NOT NULL wo immer möglich TINYINT, SMALLINT, MEDIUMINT VARCHAR statt CHAR VARCHAR(64) statt VARCHAR(255) Für Join-Spalten sollten identische Datentypen verwendet werden Sonst Join ohne Index 20

Indizierung Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 21

Schema Design - Indizierung Ein Index pro Tabelle wird verwendet Multicolumn-Indices! Präfix-Indices sparen Speicher: Weniger Blöcke create table t (c char(10), index (c(5))); Covering Indices: Die gesuchten Daten stehen im Index Keine Seeks! select a from t where b =? normaler Index wäre (b), Covering Index ist (b,a) 22

Schema Design BTREE Index BTREE Indices Default Index (außer für MEMORY-Engine) Beschleunigt = Zugriffe und Ranges, Sortierung Ein BTREE-Index auf (a, b, id) beschleunigt select id from table where a =? and b =? select id from table where a =? order by b select id from table where a =? and b between? and? select id from table where a =? and b >? select id from table where a =? and b like prefix% select id from table where a =? select id from table order by a 23

Schema Design Mehr über Indices Überindizierung kostet Leistung Aber Unterindizierung ist tödlich für Performance Index sollte selektiv sein Index auf Geschlecht ist keine gute Idee, benötigt Verhältnis besser als 1/3 Präfix-Indices sparen Speicher, solange Selektivität gegeben ist UNIQUE Indices sind effizienter als Multivalue-Indices ( INDEX ) 24

Schema Design - Indizierung Typische Überindizierung: INDEX (A) INDEX (A,B) OPTIMIZE TABLE um Indizes zusammenzuführen und zu sortieren ANALYZE TABLE... um dem Optimizier ordentliche Statistiken bereitzustellen Immer dann notwendig, wenn sich die Verteilung der Daten geändert hat 25

Server-Funktionen zur Optimierung EXPLAIN everything! --log-slow-queries und mysqldumpslow sind gute Freunde! log-slow-queries long-query-time=2 Entwicklungsrechner: Full Query Log? log-queries-not-using-indexes SHOW PROCESSLIST Besser: mytop Was eine Abfrage kostet FLUSH STATUS; <run query>; SHOW STATUS; 26

Steuerung des SQL-Optimizers SELECT STRAIGHT_JOIN * FROM tbl1,tbl2... Erzwingen der Tabellenreihenfolge wie in der Liste angegeben In MySQL 4.0/4.1 essentiell für große Joins mit vielen Tabellen USE INDEX / FORCE INDEX / IGNORE INDEX SELECT * FROM Country USE INDEX(PRIMARY) In MySQL selten verwende 27

Server Tuning Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 28

MySQL Server Architektur 29

Globale Puffer Wieviel Speicher haben wir zur Verfügung? Serverzielgröße: MySQL teilt sich den Speicher mit einer Anwendung MySQL verwendet das System alleine Verwendete Storage Engine: Engine verwaltet Caches selber (InnoDB) (80%) Engine nutzt OS Caches (MyISAM) (50%) Benötigter Speicher Für Daten + Indices ( RAM gesättigt, keine Seek Times) Für Indices + Teil der Daten ( OLTP, Seek Times) Für Teil der Daten/Teil der Indices ( DWH, Scans) Für Teil der Daten/Teil der Indices ( OLTP mit zu kleinem System, Seeks + Treshing) 30

Speicher-Engine MyISAM Keine ACID-Transaktionen, kein Auto- Recovery Geringer Footprint für Platte und Speicher, oft 25%-50% weniger als andere RDBMS komprimierte Indizes, arbeitet auch ohne Indizes, FULLTEXT, RTREE Tabellen-Sperren, gleichzeitiges Einfügen Komprimierte Read-Only -Version Index wird von MySQL zwischen-gespeichert, Daten vom Betriebssystem Schnelles Laden und Erstellen des Indexes Tabellen können auf Dateisystem-Ebene kopiert werden Unterstützt Partitionierung über MERGE.MYI.MYD Speicher-Engine idx1 In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E idx2 31

Optimierung für MyISAM key_buffer_size (8M) 25-33% des Speichers typisch, wenn nur MyISAM genutzt wird myisam_sort_buffer_size (8M) Für Index-Erstellung hoch setzen, optimalerweise so groß wie der größte Index in Tabellen myisam_recover=force,backup Um beruhigt schlafen zu können delay_key_write=all Verzögerte Index-Erstellung für bessere Schreib-Performanz Höheres Risiko von Datenkorruption bei unkontrolliertem Server-Stop Speicher-Engine In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E mysql> show status like key% Key_read_requests, Key_reads Key_reads/Key_read_requests Wert für Nutzung des Key Cache Überprüfen Sie Key_reads/sec, sollte zum IO System passen Key_write_requests, Key_writes Miss-Verhältnis typischerweise größer Key_blocks_unused Zu viel Speicher könnte allokiert worden sein 32

Speicher-Engine InnoDB InnoDB stellt ACID-Transaktionen zur Verfügung: Row-Level- und Multi-Versioning Konfigurierbare Isolation Levels Sperren auf Zeilenebene Speicher-Engine In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E Im Speicher Auf Platte (Arbeitsbereich) Log- Dateien Log Buffer Zwischengespeicherte Log Records COMMIT (+ checkpoint) Redo Log Log File 1 Log File 2 Log File 3 Table Space Buffer Pool Zwischengespeicherte Datenseiten Additional Memory Pool checkpoint Undo Log Ibdata1 Daten-Datei Ibdata2 Daten-Datei 33

Optimierung für InnoDB innodb_buffer_pool_size Bis zu 80% des verfügbaren Speichers, wenn nur InnoDB genutzt wird Zwischenspeicherung von Daten & Indizes - im Gegensatz zu MyISAM innodb_log_file_size Meist zwischen 128M und 512M Check innodb_log_waits; bei vielen Änderungen verschlechtert sich die Performanz durch Checkpointing Recoveryzeit nach Crash direkt abhängig von der größe des ungeflushten Logs innodb_flush_log_at_trx_commit 1 (langsam) schreibt (fsync) Log bei jedem Commit auf die Platte: Echtes ACID 2 (schnell) schreibt Log bei Commit nur in den OS- Zwischenspeicher, Synchronisation auf Platte einmal pro Sekunde 0 (sehr schnell) schreibt (fsync) Log ca. jede Sek. Speicher-Engine In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E mysql> SHOW INNODB STATUS; Guter Weg zu sehen, was in InnoDB passiert. File IO Buffer Pool Log Aktivität Zeilen-Aktivität In MySQL 5.0 wurden einige Variablen nach SHOW STATUS exportiert 34

MySQL Cluster NDB Engine Hochverfügbarkeit Skalierung mit Lastverteilung Anwendung Anwendung Anwendung Anwendung Anwendung Anwendung Speicher-Engine In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E SQL MySQL Server MySQL Server MySQL Server Funktionen Datenspeicher DB NDB Cluster (Daten-Knoten) DB Synchrone Replikation Two-Phase Commit Automatisches Failover DB DB Replikation auf Ebene der Speicher-Engine 35

Optimierung für MySQL Cluster ndb_force_send (1) ndb_force_send=1, direkte Versendung von Nachrichten, optimiert in Bezug auf Latency ndb_force_send=0, Sammeln der Nachrichten, optimiert für Durchsatz und bessere Verteilung der Latency, kann bei vielen gleichzeitigen Zugriffen von Vorteil sein ndb_use_exact_count (1) ndb_use_exact_count=0 setzen, um Table Counts für den Optimizer vorzutäuschen ndb_use_transactions (1) ndb_use_transactions=0 setzen, wenn eine größere Menge an Daten über eine Dump-Datei eingelesen werden Speicher-Engine In n o D B M yis A M N D B M E M O R Y M E R G E A R C H IV E 36

Server Query Cache Parameter my.cnf: query_cache_size (0) Speichermenge für Query Cache Typisch 32M, manche Datenbanken benötigen 128M query_cache_type (ON) Im schlechtesten Fall 13% Performanz- Overhead Bevorzugt für Server mit höherem SELECT/WRITE Verhältnis Connection Thread Pool Query Cache Parser Query 101101 mysql> show status; Qcache_hits, Qcache_inserts Wenn Hits/Insert-Verhältnis klein ist, Deaktivierung des Query Cache Qcache_lowmem_prunes Indikator, wie oft alte Ergebnisse wegen zu wenig Speicher gelöscht wurden. Bei hohem Wert Erhöhung von query_cache_size 37

Verbindungsbezogene Zwischenspeicher Parameter my.cnf: sort_buffer_size (2M) Für Sortierung zur Verfügung gestellter Speicher. Festplattenspeicher wird für größere Datenmengen genutzt. Oft reichen 512K oder 1M andere Zwischenspeicher read, read_rnd, etc kleine Standardwerte meist ok Abschätzung: Thread Speichernutzung = max_connections x (connection buffers) x 1/3 Oder einfach ~1GB für 1000 Verbindungen Client1 Client2 ClientN Connection Thread Pool mysql> show status; Sort_merge_passes - Anzahl Durchläufe während File Merge -Sortierung. Überprüfung, ob File Sort nötig ist Index nutzen, wenn möglich 38

Server-Verbindungen & Threads Parameter my.cnf: max_connections (100) Anzahl Verbindungen, die der Server erlaubt. Durch einen zu hohen Wert könnte der Speicher überschritten werden. Typisch 1000+ für Web-Cluster 2-facher Wert des Durchschnitts-werts als Freiraum thread_cache_size (8) Anzahl gehaltener Threads nach Verbindungsabbau Typischer Wert max_connections / 3 Client1 Client2 ClientN Connection Thread Pool mysql> show status; Max_used_connections Wird max_connections erreicht oder bei weitem nicht? Threads_created thread_cache passend? Sollte gering sein. 39

Hardware und Betriebssystem Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 40

Datenbanken und CPU CPU 64 Bit MySQL ist eine Einprozeß/Multithread-Architektur Wir haben 2006: Eine 3 GB Grenze können wir uns nicht leisten. Speicher-Bandbreite Häufiger Engpass für CPU bezogene Last Schneller Speicher, Dual Channel Speicher, dedizierter Bus für SMP Anzahl CPUs Jede Verbindung verwendet eine CPU Mehrere Abfragen skalieren gut bei Multi-CPU Maschinen Dual Core Besser als Hyper Threading Datenbanken sind in der Regel nicht CPU-Bound Wenn doch, ist die Architektur fragwürdig. 41

Datenbanken und RAM Daten und Indizes werden auf Datenbank- oder Betriebssystem-Ebene zwischengespeichert Automatisch zur Verfügung, normalerweise vorhanden Einstellungen für MySQL Server und Betriebssystem Arbeitsdaten sollten in den Speicher passen Locality of Reference ist wichtig RAM-Sättigung wäre noch besser 42

Datenbanken und Platten 125-200 Seeks pro Disk und Sekunde Viele Platten kaufen, nicht teure Platten kaufen! RAID 10, denn RAID 5 ist Gift für Datenbanke-Writes. Slaves können für bessere Performanz mit RAID0 arbeiten batteriegesicherter Write Cache ACID Transaktionen ohne langsame Platten 43

Datenbanken und Storage Wide Thin Disk Striping lohnt ab 6 Platten Ist ab 10 Platten immer Vorteilhaft Bei kleinen Konfigurationen gelegentlich dedizierte Disks für InnoDB Logs sinnvoll SAN/NAS gelegentlich fragwürdig Seek-Performance oft nicht garantiert lokaler Storage vielfach bevorzugt 44

Datenbank und Betriebssystem MySQL unterstützt eine breite Palette an Plattformen Linux, Windows, Solaris sind die meist genutzten Alle drei funktionieren gut MySQL Pakete sind von Vorteil RedHat, SuSE, Debian die Häufigsten Tarball oder RPM von http://www.mysql.com Betriebssystem-Support ist wichtig MySQL lebt von gutem Thread-Support Linux: NPTL Ältere FreeBSD, NetBSD hatten einige Probleme 64 Bit Hardware, 64 Bit Betriebssystem Wir haben 2006, wir können uns keine 3 GB Grenze leisten Treiber? Qualität der Treiber? 45

MySQL 5.1 Performance und Warteschlangen Richtig benchmarken Ansatzpunkte für Optimierungen Architektur Schema Design Indizierung Server Tuning Globale Puffer Threadlokale Puffer Andere Parameter Hardware und Betriebssystem MySQL 5.1 46

Neue Performanzfunktionalitäten in MySQL 5.1 Tabellen- und Index-Partitionierung Verbesserungen für Volltext-Index Archive Engine Schnelleres ALTER TABLE Schnelleres ADD/DROP INDEX Paralleler Datenimport Neues Lasttest-Werkzeug MyISAM Memory Option Neue Prozeß- und SQL-Diagnostik 47

Quellen MySQL Online Handbuch eine gute Informationsquelle http://dev.mysql.com/doc/mysql/en/index.html SysBench - Benchmark und Stress-Test Werkzeug http://sourceforge.net/projects/sysbench MySQL Benchmarks Mailing Liste benchmarks@lists.mysql.com 48

Fragen & Antworten Weitere Unterstützung zu Leistungsoptimierung: www.mysql.de/consulting www.mysql.de/training Kristian Köhntopp <kris@mysql.com> http://blog.koehntopp.de http://mysqldump.azundris.com 49