【線上】SQLAlchemyデータベースがフル接続されていることによる問題
21115 ワード
目次原因と現象回顧 この問題は当時整理され、再現された である.今回のオンライン問題をまとめた知識 これはSupersetプロジェクトをしたばかりの時に出会ったオンライン問題で、振り返って整理します.
原因と現象の回顧
アクセスピークqpsが増加し、データベース接続がSQLAlchemy設定のデフォルトの最大数を超え、タイムアウト時間に達したため、オンライン上の多くのユーザーが次のエラーを表示しました.
この問題は当時整理して再現した.
これを以下の問題と呼ぶことができて、ネット上にも多くの類似の文章があって、しかし自分で出会って実践しないで、いつも体得できません;githubにまとめてpythonの基礎知識を復習します
QueuePool limit of size overflow reached,connection timed out,timeout問題
今回のオンライン上の問題をまとめた知識
主にMySQLデータベースに関する知識データベースのいくつかのシステム変数
接続のタイムアウトのいくつかについて、最大の制限が表示される可能性があります.接続数などもDBAモニタに必ずあるアイテムですデータベース自体もtcp接続されており、接続情報を表示できます.一般的にDBAはこれらの監視アラーム を構成します.
これらの意味はすべてmysqlの公式ドキュメントで見つけることができます.例えば、次のようになります.
次に問題を解決する構想であるべきです:やはり本質を理解しなければならなくて、再現することができて、整理してまとめます.
原因と現象の回顧
アクセスピークqpsが増加し、データベース接続がSQLAlchemy設定のデフォルトの最大数を超え、タイムアウト時間に達したため、オンライン上の多くのユーザーが次のエラーを表示しました.
2018-11-04 11:27:50,370 /var/www/html/superset/views/base.py base.py[line:56] : ERROR QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
(self.size(), self.overflow(), self._timeout))
(self.size(), self.overflow(), self._timeout))
TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
(self.size(), self.overflow(), self._timeout))
この問題は当時整理して再現した.
これを以下の問題と呼ぶことができて、ネット上にも多くの類似の文章があって、しかし自分で出会って実践しないで、いつも体得できません;githubにまとめてpythonの基礎知識を復習します
QueuePool limit of size overflow reached,connection timed out,timeout問題
今回のオンライン上の問題をまとめた知識
主にMySQLデータベースに関する知識
show variables like '%connect%';
接続のタイムアウトのいくつかについて、最大の制限が表示される可能性があります.接続数などもDBAモニタに必ずあるアイテムです
+-----------------------------------------------+-----------------+
| Variable_name | Value |
+-----------------------------------------------+-----------------+
| character_set_connection | utf8 |
| collation_connection | utf8_general_ci |
| connect_timeout | 10 |
| disconnect_on_expired_password | ON |
| extra_max_connections | 1 |
| init_connect | |
| max_connect_errors | 999999999 |
| max_connections | 10240 |
| max_user_connections | 0 |
| performance_schema_session_connect_attrs_size | -1 |
+-----------------------------------------------+-----------------+
10 rows in set
mysql> show full processlist;
+----+------+-----------------+------+---------+-------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+------+---------+-------+-------+-----------------------+
| 2 | root | localhost | test | Query | 0 | init | show full processlist |
| 8 | root | localhost:59270 | test | Sleep | 38068 | | NULL |
| 9 | root | localhost:59272 | test | Sleep | 37914 | | NULL |
| 10 | root | localhost:59288 | test | Sleep | 37914 | | NULL |
| 11 | root | localhost:59289 | test | Sleep | 708 | | NULL |
| 12 | root | localhost:59290 | test | Sleep | 650 | | NULL |
+----+------+-----------------+------+---------+-------+-------+-----------------------+
6 rows in set (0.00 sec)
mysql>
これらの意味はすべてmysqlの公式ドキュメントで見つけることができます.例えば、次のようになります.
次に問題を解決する構想であるべきです:やはり本質を理解しなければならなくて、再現することができて、整理してまとめます.