2017-09-14 5 views
0

Je suis confronté à un problème d'utilisation de mémoire élevée sur le serveur MySQL RDS, Nous avons défini le plafonnement de la mémoire pour MySQL est de 149 Go mais toujours consommer environ 98% de mémoire.RDS MySQL Haute consommation de mémoire

Quelqu'un peut-il m'aider à comprendre, la consommation de mémoire RDS et le comportement de libération?

Comment pouvons-nous savoir ce qui provoque une utilisation élevée de la mémoire? Comment pouvons-nous l'éviter?

Configuration RDS: - db.r3.8xlarge (cœur du processeur = 32 et mémoire = 240 Go).

mémoire MySQL Configuration: -

Innodb_buffer_pool_size=144 GB 

Innodb_buffer_pool_instances= 1 

Innodb_page_cleaners =1 

Key_buffer_size = 256 MB 

query_cache_size =64 MB 

tmp_table_size =4096 MB 

innodb_log_buffer_size= 64 MB 

Max_connections = 20484 

sort_buffer_size= 2 MB 

read_buffer_size = 0.128 MB 

read_rnd_buffer_size = 0.256 MB 

join_buffer_size = 1 MB 

thread_stack =0.25 MB 

binlog_cache_size = 0.031 MB 

Une partie de InnoDB Statut

-------- 
FILE I/O 
-------- 
I/O thread 0 state: waiting for completed aio requests (insert buffer thread) 
I/O thread 1 state: waiting for completed aio requests (log thread) 
I/O thread 2 state: waiting for completed aio requests (read thread) 
I/O thread 3 state: waiting for completed aio requests (read thread) 
I/O thread 4 state: waiting for completed aio requests (read thread) 
I/O thread 5 state: waiting for completed aio requests (read thread) 
I/O thread 6 state: waiting for completed aio requests (read thread) 
I/O thread 7 state: waiting for completed aio requests (read thread) 
I/O thread 8 state: waiting for completed aio requests (read thread) 
I/O thread 9 state: waiting for completed aio requests (read thread) 
I/O thread 10 state: waiting for completed aio requests (write thread) 
I/O thread 11 state: waiting for completed aio requests (write thread) 
I/O thread 12 state: waiting for completed aio requests (write thread) 
I/O thread 13 state: waiting for completed aio requests (write thread) 
I/O thread 14 state: waiting for completed aio requests (write thread) 
I/O thread 15 state: waiting for completed aio requests (write thread) 
I/O thread 16 state: waiting for completed aio requests (write thread) 
I/O thread 17 state: waiting for completed aio requests (write thread) 
I/O thread 18 state: waiting for completed aio requests (write thread) 
I/O thread 19 state: waiting for completed aio requests (write thread) 
I/O thread 20 state: waiting for completed aio requests (write thread) 
I/O thread 21 state: waiting for completed aio requests (write thread) 
I/O thread 22 state: waiting for completed aio requests (write thread) 
I/O thread 23 state: waiting for completed aio requests (write thread) 
I/O thread 24 state: waiting for completed aio requests (write thread) 
I/O thread 25 state: waiting for completed aio requests (write thread) 
Pending normal aio reads: [0, 0, 0, 0, 0, 0, 0, 0] , aio writes: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] , 
ibuf aio reads:, log i/o's:, sync i/o's: 
Pending flushes (fsync) log: 0; buffer pool: 0 
16300373 OS file reads, 327069064 OS file writes, 34275132 OS fsyncs 
0.00 reads/s, 0 avg bytes/read, 24.00 writes/s, 2.83 fsyncs/s 
------------------------------------- 
INSERT BUFFER AND ADAPTIVE HASH INDEX 
------------------------------------- 
Ibuf: size 1, free list len 3690, seg size 3692, 1232846 merges 
merged operations: 
insert 1518763, delete mark 7967515, delete 581073 
discarded operations: 
insert 0, delete mark 0, delete 0 
Hash table size 38278223, node heap has 53862 buffer(s) 
Hash table size 38278223, node heap has 101395 buffer(s) 
Hash table size 38278223, node heap has 51039 buffer(s) 
Hash table size 38278223, node heap has 49662 buffer(s) 
Hash table size 38278223, node heap has 31822 buffer(s) 
Hash table size 38278223, node heap has 69910 buffer(s) 
Hash table size 38278223, node heap has 62223 buffer(s) 
Hash table size 38278223, node heap has 107050 buffer(s) 
75.17 hash searches/s, 83.82 non-hash searches/s 
--- 
LOG 
--- 
Log sequence number 23815192515256 
Log flushed up to 23815192515256 
Pages flushed up to 23815192515256 
Last checkpoint at 23815192515247 
0 pending log flushes, 0 pending chkp writes 
71186755 log i/o's done, 7.34 log i/o's/second 
---------------------- 
BUFFER POOL AND MEMORY 
---------------------- 
Total large memory allocated 158455627776 
Dictionary memory allocated 9737076 
Buffer pool size 9444223 
Free buffers  272250 
Database pages  8645010 
Old database pages 3191205 
Modified db pages 0 
Pending reads  0 
Pending writes: LRU 0, flush list 0, single page 0 
Pages made young 36040960, not young 898847533 
0.00 youngs/s, 0.00 non-youngs/s 
Pages read 15253773, created 43492874, written 244272465 
0.00 reads/s, 0.52 creates/s, 16.07 writes/s 
Buffer pool hit rate 1000/1000, young-making rate 0/1000 not 0/1000 
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s 
LRU len: 8645010, unzip_LRU len: 0 
I/O sum[469]:cur[0], unzip sum[0]:cur[0] 
-------------- 
ROW OPERATIONS 
-------------- 
1 queries inside InnoDB, 0 queries in queue 
1 read views open inside InnoDB 
Process ID=18963, Main thread ID=47543500240640, state: sleeping 
Number of rows inserted 7973224537, updated 16944890, deleted 452458106, read 549621443211 
6.03 inserts/s, 0.07 updates/s, 0.03 deletes/s, 229179.61 reads/s 
+0

Que voulez-vous dire, "mémoire cache?" De plus, combien de "mémoire libre" cette instance a-t-elle? –

+0

@ Michael-sqlbot J'essaie de dire "le plafonnement de la mémoire" signifie que nous calculons par calcul de mémoire ou requête de calcul de mémoire, nous avons trouvé la consommation globale de mémoire était de 149 Go, y compris toute la mémoire tampon de thread. –

+0

Il n'est pas possible de calculer l'utilisation maximale de la mémoire. MySQL utilisera autant de mémoire que nécessaire pour gérer la charge de travail. Les formules qui prétendent le faire calculent généralement un nombre qui représente la limite inférieure (non supérieure) d'une valeur qui n'est pas significative car elle suppose que les connexions 'max_connections' existent. Il est plus proche du meilleur cas que du maximum. Combien de mémoire libre affichez-vous dans les métriques d'instance? –

Répondre

0

Innodb_buffer_pool_size=144 GB ressemble à une erreur de syntaxe, mais les autres sorties confirment qu'il est réglé sur 144G. "Capping" à 149G - Est-ce quelque chose dans RDS?

Semble plutôt serré, compte tenu du buffer_pool_size. - Puisqu'il est possible d'affecter par requête, vous risquez sérieusement de souffler de la RAM. Abaissez-le à 1G. \

Max_connections = 20484 - ridiculement grand. Diminuer à 1000. Note: De nombreux morceaux de mémoire sont alloués "par connexion". Donc, si vous avez tous une partie à 20K, vous pouvez souffler de la RAM.

Innodb_buffer_pool_instances= 1 - passez à 16 pour une légère amélioration des performances. Après avoir résolu les problèmes ci-dessus, ... buffer_pool est un moyen simple de réduire l'empreinte RAM de MySQL. Changer cela si le 98% est un problème.

+0

Il n'y a pas de concept RDS appelé "mémoire cache". ramasser d'un script de réglage. –