前書き
MySQLデータベースに接触したばかりの開発者や運用保守担当者が多いと推定されており、MySQLデータベースが占める合計メモリの計算方法がわかりません。
バッファプールのサイズが明らかに大きくないのは不思議なこともあると推定されますが、オペレーティングシステムのメモリにデータベースが不足しているため、MySQLデータベースプロセスがシステムによって自動的に強制終了されます。
これがあなたへの答えです、
MySQLデータはメモリを占有します
MySQLデータベースはオペレーティングシステムのメモリを占有し、主に2つの部分に分かれています
- 最初の部分は、innodbストレージエンジンが占有するバッファープールサイズであり、他の部分は、myismストレージエンジンが占有するメモリサイズです。
- 2番目の部分は次のとおりです。MySQLデータベースアプリケーションセッションが占めるメモリサイズ
MySQLデータベースのメモリ計算式
1.バッファプールのメモリ占有率の計算方法
バッファプールには現在、innodbとmyismの2つのストレージエンジンがあり、もう1つはREDOログのメモリサイズinnodb_log_buffer_sizeです。
mysql> SELECT ( @@innodb_buffer_pool_size
-> + @@innodb_log_buffer_size
-> + @@key_buffer_size ) / 1024 / 1024 AS MEMORY_MB;
+--------------+
| MEMORY_MB |
+--------------+
| 584.00000000 |
+--------------+
1 row in set (0.00 sec)
2. MySQLデータベースセッション
が占有するメモリのサイズ次の式を使用して、セッションが占有するメモリのサイズを計算できます。
mysql> SELECT ( @@read_buffer_size + @@read_rnd_buffer_size
-> + @@sort_buffer_size + @@tmp_table_size
-> + @@join_buffer_size + @@binlog_cache_size ) / 1024 / 1024 AS Session_MB;
+-------------+
| Session_MB |
+-------------+
| 16.90625000 |
+-------------+
1 row in set (0.00 sec)
ここで、データベースの全体的なパフォーマンスが低下した後、アプリケーションが突然多くのデータベース接続を増やし、オペレーティングシステムのメモリが不足し、システムがプロセスを自動的に強制終了する場合があることに注意してください。したがって、データベースを設計するときは、データベースが保持する接続の最大数を考慮する必要があります。
すべての接続が占める合計メモリサイズを計算します。
先查询出数据库有多少会话
mysql> select count(*) from INFORMATION_SCHEMA.PROCESSLIST;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
根据会话数去乘一个会话占用内存的大小,最后得到的就是会话占用的内存总大小。
参照リンク:
MySQLデータベースが占有するメモリを計算する方法:
https ://mp.weixin.qq.com/s/_aOCYw0IxJDEjXWOZRPV4w