Bei der Suche nach Datenbankoptimierungen im Internet erfolgt die Optimierung grundsätzlich auf SQL-Ebene, und die Instanzoptimierung der Datenbank selbst wird selten erwähnt. Auch wenn dies der Fall ist, basiert alles auf der Instanzoptimierung einer bestimmten Datenbank. Dieser Artikel behandelt die Instanzoptimierung aller derzeit auf dem Markt befindlichen gängigen Datenbanken (Oralce, MySQL, POSTGRES, Dameng). Nutzen Sie 80 % oder mehr der oben genannten Datenbankleistung.
Datenbankoptimierungsmethodik
Bei diesem Teil handelt es sich um theoretisches Wissen. Studierende, die nicht interessiert sind, können später direkt zum Parameterkonfigurationsteil springen .
Datenbankoptimierungsziele
Empfohlenes "MySQL-Video-Tutorial"
Je nach verschiedenen Rollen Die Datenbankoptimierung ist in die folgenden Ziele unterteilt:
Geschäftsperspektive (Hauptbenutzer):
Reaktionszeit der Benutzerseite reduzieren
Datenbankperspektive (Entwicklung):
Datenbank-SQL-Antwortzeit reduzieren
Datenbankserverperspektive (Betrieb). Dimension):
Physische Ressourcen des Datenbankservers voll ausnutzen
CPU-Auslastung des Datenbankservers reduzieren
Reduzieren Sie die E/A-Nutzung des Datenbankservers
Reduzieren Sie die Speichernutzung des Datenbankservers
Indikatoren
1 . Die durchschnittliche SQL-Antwortzeit wird kürzer
Vor der Optimierung: Die durchschnittliche Datenbank-Antwortzeit beträgt 500 ms
b 2. Datenbankserver Die CPU-Auslastung nimmt ab
Vor der Optimierung: Die CPU-Auslastung beträgt 70 % während der Datenbank-Spitzenzeit
b. Optimierungsziel: Die CPU-Auslastung beträgt 50 % während der Datenbank-Spitzenzeit
3 . Die IO-Auslastung des Datenbankservers wird geringer
Vor der Optimierung beträgt der Datenbank-IO-WAIT 30 %
b >
Missverständnisse bei der Datenbankoptimierung
Bei der Optimierung der Datenbank kann es zu folgenden Missverständnissen kommen:
1 Interne Prinzipien der DatenbankEs gibt „Routinen“ zur Optimierung, und Sie können die Datenbankoptimierung auch gut abschließen, indem Sie diese „Routinen“ befolgen2 Durch kontinuierliche Anpassung der Datenbankparameter kann letztendlich eine Optimierung erreicht werdenManchmal funktioniert das Design nicht, egal wie unangemessen die Parameter angepasst werden 3. Durch kontinuierliche Anpassung der Betriebssystemparameter kann letztendlich eine Optimierung erzielt werden Das Gleiche wie oben4. Die Datenbankleistung wird durch die Anwendung und die Datenbankarchitektur bestimmt, und die Anwendungsentwicklung hat wenig damit zu tunIm Gegenteil, die Anwendungsentwicklung hat viel damit zu tun 5. Lesen und Schreiben müssen getrennt werden, und Datenbanken und Tabellen müssen aufgeteilt werden Datenvolumen Erst wenn das Niveau ein bestimmtes Verhältnis erreicht, ist es notwendig, Lesen und Schreiben zu trennen und die Tabellen in separate Datenbanken aufzuteilen , es wird nur die Komplexität erhöhen. Im Allgemeinen kann die Einzeltabellengröße von Oracle 100 Millionen und die von MySQL 10 bis 20 Millionen erreichen
Datenbankoptimierungsprozess
Die vollständige Datenbankoptimierung Der Prozess ist wie folgt:
Zunächst müssen Sie das Optimierungsproblem so gut wie möglich verstehen, während des Problems Systeminformationen sammeln und diese archivieren. Entwickeln Sie Optimierungsziele auf der Grundlage der aktuellen Systemproblemleistung und kommunizieren Sie mit Kunden, um eine Einigung über die Ziele zu erzielen. Analysieren Sie Systemprobleme mithilfe einer Reihe von Tools und formulieren Sie Optimierungspläne. Nach Abschluss der Planüberprüfung wird diese von jeder verantwortlichen Person umgesetzt. Wird das Optimierungsziel erreicht, wird ein Optimierungsbericht erstellt, andernfalls muss der Optimierungsplan neu formuliert werden.
Datenbankinstanzoptimierung
Datenbankinstanzoptimierung folgt drei Mantras: Das Protokoll darf nicht klein sein, der Cache muss groß genug sein und die Verbindung muss ausreichend sein .
Nachdem die Datenbanktransaktion übermittelt wurde, müssen die durch die Transaktion vorgenommenen Änderungen an der Datenseite auf die Festplatte geleert (fsync) werden, um die Haltbarkeit der Daten sicherzustellen. Bei diesem Festplattenleervorgang handelt es sich um einen zufälligen Schreibvorgang mit geringer Leistung. Wenn der Datenträger bei jeder Übermittlung einer Transaktion geleert wird, wirkt sich dies stark auf die Leistung der Datenbank aus. Die Datenbank übernimmt die folgenden zwei Optimierungstechniken im Architekturdesign:
a Schreiben Sie zuerst die Transaktion in die Protokolldatei RedoLog (WAL) und optimieren Sie das zufällige Schreiben in sequentielles Schreiben b. Fügen Sie einen Layer-Cache-Strukturpuffer hinzu, der jeden Schreibvorgang in einen sequentiellen Schreibvorgang optimiert , daher sind Protokollierung und Caching besonders wichtig für Datenbankinstanzen. Wenn nicht genügend Verbindungen vorhanden sind, löst die Datenbank direkt eine Ausnahme aus und das System ist nicht zugänglich. DatenbankparameteroptimierungMainstream-Datenbankarchitekturen haben alle Folgendes gemeinsam:Datencache
SQL-AnalysebereichSpeicher sortierenREDO und UNDOSperren, LATCH, MUTEXÜberwachung und VerbindungLeistung beim Lesen und Schreiben von DateienAls nächstes passen wir die Parameter entsprechend den verschiedenen Datenbanken an, um die beste Leistung der Datenbank zu erreichen.
ORACLE
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | SGA_TAGET、MEMORY_TARGET | 物理内存70-80% | 越大越好 |
数据缓存 | DB_CACHE_SIZE | 物理内存70-80% | 越大越好 |
SQL解析 | SHARED_POOL_SIZE | 4-16G | 不建议设置过大 |
监听及连接 | PROCESSES、SESSIONS、OPEN_CURSORS | 根据业务需求设置 | 一般为业务预估连接数的120% |
其他 | SESSION_CACHED_CURSORS | 大于200 | 软软解析 |
MYSQL(INNODB)
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | INNODB_BUFFER_POOL_SIZE | 物理内存50-80% | 一般来说越大性能越好 |
日志相关 | Innodb_log_buffer_size | 16-32M | 根据运行情况调整 |
日志相关 | sync_binlog | 1、100、0 | 1安全性最好 |
监听及连接 | max_connections | 根据业务情况调整 | 可以预留一部分值 |
文件读写性能 | innodb_flush_log_at_trx_commit | 2 | 安全和性能的折中考虑 |
其他 | wait_timeout,interactive_timeout | 28800 | 避免应用连接定时中断 |
POSTGRES
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | SHARED_BUFFERS | 物理内存10-25% | |
数据缓存 | CACHE_BUFFER_SIZE | 物理内存50-60% | |
日志相关 | wal_buffer | 8-64M | 不建议设置过大过小 |
监听及连接 | max_connections | 根据业务情况调整 | 一般为业务预估连接数的120% |
其他 | maintenance_work_mem | 512M或更大 | |
其他 | work_mem | 8-16M | 原始配置1M过小 |
其他 | checkpoint_segments | 32或者更大 |
Dameng Database
参数分类 | 参数名 | 参数值 | 备注 |
---|---|---|---|
数据缓存 | MEMROY_TARGET、MEMROY_POOL | 物理内存90% | |
数据缓存 | BUFFER | 物理内存60% | 数据缓存 |
数据缓存 | MAX_BUFFER | 物理内存70% | 最大数据缓存 |
监听及连接 | max_sessions | 根据业务需求设置 | 一般为业务预估连接数的120% |
Zusammenfassung
Es gibt zu viele Möglichkeiten, die Datenbank zu optimieren, einschließlich des Austauschs von Festplatten-Arrays und der Aufrüstung der Hardware, des Umschreibens von SQL-Skripts zum Hinzufügen von Indizes und der Anpassung von Datenbankparametern . Optimieren Sie die Leistung und passen Sie sogar das Datenbankschema an. Dieser Artikel optimiert die Parameter der Datenbank selbst. Durch Anpassen der Parameter in den obigen Tabellen können Sie grundsätzlich 80 % der besten Leistung der Datenbank erzielen.
Dieser Artikel stammt von der chinesischen PHP-Website, Spalte MySQL-Tutorial, willkommen zum Lernen!
Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung der Datenbankoptimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!