Heim  >  Artikel  >  Datenbank  >  So beheben Sie einen abnormalen Speicheranstieg in der MySQL-Produktionsdatenbank

So beheben Sie einen abnormalen Speicheranstieg in der MySQL-Produktionsdatenbank

WBOY
WBOYnach vorne
2023-05-29 23:25:191769Durchsuche

Leistungsschema ändern

Da die Produktionsumgebung des Unternehmens Alibaba Cloud RDS verwendet, ist es relativ praktisch, Parameter zu ändern. Das Standardleistungsschema ist 0 und wird dieses Mal auf 1 geändert. Senden Sie die Parameter nach der Änderung und die Datenbank wird neu gestartet. Dies wird bei niedrigen Geschäftsspitzen empfohlen.

Speicherüberwachung öffnen

Melden Sie sich bei der MySQL-Datenbank an und führen Sie die folgende SQL aus, um die Speicherüberwachung zu öffnen.

update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%';

Überprüfen Sie es nach dem Öffnen.

select * from performance_schema.setup_instruments where name like 'memory%innodb%' limit 5;

**Hinweis: **Mit diesem Befehl werden Speicherstatistiken online geöffnet, sodass nur neu hinzugefügte Speicherobjekte nach dem Öffnen gezählt werden. Es wird empfohlen, dass Sie nicht gezählt werden Warten Sie nach dem Öffnen eine Weile, um die folgenden Schritte auszuführen, um Threads mit hoher Speicherauslastung zu identifizieren.

Speicherverbrauch ermitteln

Statistischer Ereignisspeicherverbrauch

select event_name,
       SUM_NUMBER_OF_BYTES_ALLOC
from performance_schema.memory_summary_global_by_event_name
order by SUM_NUMBER_OF_BYTES_ALLOC desc
LIMIT 10;
+---------------------------------------+-------------------------------------+
| event_name                            | SUM_NUMBER_OF_BYTES_ALLOC           |
+---------------------------------------+-------------------------------------+
| memory/sql/Filesort_buffer::sort_keys | 763523904056                        |
| memory/memory/HP_PTRS                 | 118017336096                        |
| memory/sql/thd::main_mem_root         | 114026214600                        |
| memory/mysys/IO_CACHE                 | 59723548888                         |
| memory/sql/QUICK_RANGE_SELECT::alloc  | 14381459680                         |
| memory/sql/test_quick_select          | 12859304736                         |
| memory/innodb/mem0mem                 | 7607681148                          |
| memory/sql/String::value              | 1405409537                          |
| memory/sql/TABLE                      | 1117918354                          |
| memory/innodb/btr0sea                 | 984013872                           |
+---------------------------------------+-------------------------------------+

Sie können sehen, dass das Ereignis mit dem höchsten Speicherverbrauch erfahrungsgemäß Filesort_buffer ist. Dies sollte mit der Sortierung zusammenhängen.

Statistischer Thread-Speicherverbrauch

select thread_id,
       event_name,
       SUM_NUMBER_OF_BYTES_ALLOC
from performance_schema.memory_summary_by_thread_by_event_name
order by SUM_NUMBER_OF_BYTES_ALLOC desc
limit 10;
+---------------------+---------------------------------------+-------------------------------------+
| thread_id           | event_name                            | SUM_NUMBER_OF_BYTES_ALLOC           |
+---------------------+---------------------------------------+-------------------------------------+
| 105                 | memory/memory/HP_PTRS                 | 69680198792                         |
| 183                 | memory/sql/Filesort_buffer::sort_keys | 49210098808                         |
| 154                 | memory/sql/Filesort_buffer::sort_keys | 43304339072                         |
| 217                 | memory/sql/Filesort_buffer::sort_keys | 37752275360                         |
| 2773                | memory/sql/Filesort_buffer::sort_keys | 31460644712                         |
| 218                 | memory/sql/Filesort_buffer::sort_keys | 31128994280                         |
| 2331                | memory/sql/Filesort_buffer::sort_keys | 28763981248                         |
| 106                 | memory/memory/HP_PTRS                 | 27938197584                         |
| 191                 | memory/sql/Filesort_buffer::sort_keys | 27701610224                         |
| 179                 | memory/sql/Filesort_buffer::sort_keys | 25624723968                         |
+---------------------+---------------------------------------+-------------------------------------+

Sie können sehen, dass Threads, die viel Speicher verbrauchen, mit Filesort_buffer zusammenhängen. Filesort_buffer相关。

定位具体SQL

根据前边我们查到的thread_id

Suchen Sie nach einem bestimmten SQL

So beheben Sie einen abnormalen Speicheranstieg in der MySQL-Produktionsdatenbank Gehen Sie gemäß der zuvor gefundenen thread_id zum Protokoll, um das entsprechende Alibaba Cloud RDS-Überwachungsprotokoll zu finden relativ mächtig von. Wir rufen direkt basierend auf thread_id ab.



Wir sehen eine große Anzahl solcher SQLs in den Protokollen, und die Anzahl der gescannten Zeilen reicht von Tausenden bis zu Zehntausenden. Obwohl die Dauer jeder Abfrage nicht lang ist und normalerweise zwischen zehn und hundert Millisekunden liegt, ist die Anzahl gleichzeitiger Anforderungen groß. #🎜🎜##🎜🎜##🎜🎜#

Das obige ist der detaillierte Inhalt vonSo beheben Sie einen abnormalen Speicheranstieg in der MySQL-Produktionsdatenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen