SQLSTATE[HY000] [1040] 接続が多すぎる解決策

ウェブサイトがSQLSTATE[HY000] [1040] Too many connectedsに遭遇した場合、どうすれば良いですか?

这个错误表示 このエラーは、MySQLサーバーの現在の接続数が設定された最大値(デフォルトでは151)を超えており、新しい接続が拒否されていることを示しています。このエラーは、WordPressやLaravelなどの同時実行性の高いウェブサイトで発生することが多く、アプリケーションが接続を迅速に解放できない、トラフィックが急増する、設定が不十分であるなどの問題が原因で発生します。ご安心ください。このエラーは通常すぐに修正できますが、再発を防ぐためには監視が不可欠です。

MySQL の世界で最もよく発生するエラーの 1 つは、悪名高いエラー 1040 です。

SQLSTATE[HY000] [1040] 接続が多すぎる解決策

実際には、これはMySQLインスタンスがクライアント接続の最大許容数に達したことを意味します。接続が閉じられるまで、サーバーは新しい接続を受け入れません。

こうした状況を防ぐための実践的なアドバイス、あるいはこうした状況に陥ってしまった場合に回復する方法についてお話ししたいと思います。

max_connectionsパラメータを微調整する

この設定は、MySQLインスタンスが受け入れ可能な最大接続数を定義します。最大接続数を設定する理由は、サーバーの利用可能なリソースとアプリケーションの使用パターンによって異なります。制御されていない接続を許可するとサーバーがクラッシュする可能性があり、これはそれ以上の接続をブロックするよりも深刻な事態を招く可能性があります。Max_connectionsはサーバーを保護するための値であり、ハイジャックされた接続に関連する問題を修正するためのものではありません。

サーバーへの接続ごとに、接続を管理するための「スレッド」や接続管理に使用されるメモリ、そして可変リソース(メモリ内テーブルの作成に使用されるメモリなど)といった一定量のオーバーヘッドが消費されます。アプリケーションのリソースパターンを測定し、この接続数を超える危険性があるポイントを特定することが重要です。

Percona Monitoring and Management (PMM) は、これらの値を見つけるのに役立ちます。メモリ使用量と実行中のスレッドのパターンを表示し、接続数との相関関係を分析できます。また、PMM は接続アクティビティの急増も表示できるため、しきい値にどれだけ近づいているかを把握できます。サーバーのリソース制約に応じて調整してください。

以下に示すのは、最大使用量と最大接続数の間に十分な余裕があり、接続パターンが非常に安定したサーバーです。

MySQL: 接続数が多すぎるエラーの修正方法: (HY000/1040): 接続数が多すぎます

まずMySQL設定ファイルを調整し、MySQLを再起動します。

# # これらのグループはMariaDBサーバーによって読み取られます。 # サーバーのみ (クライアントは含まない) に表示されるオプションに使用します # これは、スタンドアロン デーモンおよび組み込みサーバーによって読み取られます [server] # これは、mysqld スタンドアロン デーモン専用です [mysqld] # # * 基本設定 # #user = mysql pid-file = /run/mysqld/mysqld.pid basedir = /usr #datadir = /var/lib/mysql #tmpdir = /tmp # 逆 DNS が壊れていると接続速度がかなり低下するため、"host by domain name" アクセス許可がない場合は、名前解決をスキップしても安全です #skip-name-resolve # skip-networking の代わりに、デフォルトでは、互換性が高く、安全性も低い localhost のみで listen するようになりました。 bind-address = 127.0.0.1 # # * 微調整 # key_buffer_size = 512M max_allowed_packet = 2G thread_stack = 192K thread_cache_size = 1024 tmp_table_size = 1024M max_heap_table_size = 1024M open_files_limit = 0 #key_buffer_size = 128M #max_allowed_packet = 1G #thread_stack = 192K #thread_cache_size = 8 # これは起動スクリプトを置き換え、必要に応じてMyISAMテーブルを最初にアクセスしたときにチェックします #myisam_recover_options = BACKUP #max_connections = 100 #table_cache = 64 myisam_recover_options = BACKUP max_connections = 9999 table_open_cache = 40000 # # * ログ記録とレプリケーション # # 注: 構成されたログ ファイルまたはそのディレクトリを作成し、mysql ユーザーが書き込み可能である必要があります。例: # $ sudo mkdir -m 2750 /var/log/mysql # $ sudo chown mysql /var/log/mysql # 両方の場所は cronjob によってローテーションされます。 # このログ タイプはパフォーマンス キラーであることに注意してください。 # 必要な場合にのみ、短いテスト期間の実行時にこれを変更することをお勧めします。 #general_log_file = /var/log/mysql/mysql.log #general_log = 1 # systemd で実行している場合、エラー ログは stdout/stderr 経由で journald に記録されます # また、レガシー init を実行している場合は、エラー ログは # /etc/mysql/conf.d/mariadb.conf.d/50-mysqld_safe.cnf のため syslog に記録されます # エラーを別のファイルに記録する場合は、これを有効にします #log_error = /var/log/mysql/error.log # 特に実行時間の長いクエリを確認するには、スロー クエリ ログを有効にします #log_slow_query_file = /var/log/mysql/mariadb-slow.log #log_slow_query_time = 10 #log_slow_verbosity = query_plan,explain #log-queries-not-using-indexes #log_slow_min_examined_row_limit = 1000 long_query_time =5 # 負荷テストに基づき、1~5 秒を推奨 slow_query_log = 1 # スロー クエリ ログを有効にする (有効でない場合) slow_query_log_file = /var/log/mysql/mariadb-slow.log log_slow_verbosity = query_plan,explain # 実行プランを記録する log_queries_not_using_indexes = 1 # インデックスを使用していないクエリを記録する log_slow_admin_statements = 1 # 管理ステートメントを記録する # 以下は、簡単に再生できるバックアップ ログとして、またはレプリケーションに使用できます。 # 注: レプリカを設定する場合は、変更する必要がある可能性のあるその他の # 設定について、README.Debian を参照してください。 #server-id = 1 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 #max_binlog_size = 100M # # * SSL/TLS # # ドキュメントについては、# https://mariadb.com/kb/en/securing-connections-for-client-and-server/ をお読みください。#ssl-ca = /etc/mysql/cacert.pem #ssl-cert = /etc/mysql/server-cert.pem #ssl-key = /etc/mysql/server-key.pem #require-secure-transport = on # # * 文字セット # # MySQL/MariaDB のデフォルトは Latin1 ですが、Debian ではデフォルト# utf8 4バイト文字セットに完全準拠します。client.cnf も参照してください。character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # # * InnoDB # # InnoDBはデフォルトで有効になっており、/var/lib/mysql/ に10MBのデータファイルが作成されます。# InnoDB関連のオプションについては、マニュアルをご覧ください。他にもたくさんあります! # 最も重要なのは、InnoDB にシステム RAM の 80 % をバッファ使用用に割り当てることです: # https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size #innodb_buffer_pool_size = 8G innodb_buffer_pool_size = 48G innodb_buffer_pool_instances = 16 innodb_log_file_size = 12G innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT innodb_io_capacity = 2000 innodb_read_io_threads = 8 innodb_write_io_threads = 8 # これは組み込みサーバー専用です [embedded] # このグループは読み取り専用ですMariaDB サーバーによって使用されますが、MySQL によって使用されることはありません。# MySQL と MariaDB で同じ .cnf ファイルを使用する場合、# MariaDB 専用のオプションをここに配置できます [mariadb] # このグループは MariaDB-10.11 サーバーによってのみ読み取られます。# 異なるバージョンの MariaDB で同じ .cnf ファイルを使用する場合、# 古いサーバーが理解できないオプションにはこのグループを使用します [mariadb-10.11]
スコア

手紙への返信

メールアドレスが変更されることはありません。 支払い欄に必須の項目は必須です