特定のリソースに対して最適な設定でMySQLを実行すると、サーバーの負荷が大きくなり、サーバーの速度低下を防ぐことができます。一般に、より大きな負荷を処理するようにApacheを調整した後、MySQLを追加の接続に調整することは有益です。
データベースのチューニングは広範なトピックであり、このガイドでは、MySQL構成の編集の基本のみを取り上げています。大規模なMySQLデータベースは、かなりの量のメモリを必要とする場合があります。このため、このようなセットアップにはHighMemoryLinodeを使用することをお勧めします。
注 このガイドの手順には、root権限が必要です。必ずrootとして以下の手順を実行してください または sudo
プレフィックス。特権の詳細については、ユーザーとグループのガイドを参照してください。
MySQLの最適化に役立つツール
MySQLデータベースを再構成する必要があるかどうかを判断するには、リソースの現在のパフォーマンスを確認するのが最善です。これは、topコマンドまたはLinodeLongviewサービスを使用して実行できます。少なくとも、サーバーのRAMとCPUの使用量に精通している必要があります。これは、次のコマンドで検出できます。
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
MySQLTunerスクリプトは、MySQLのインストールを評価し、サーバーのパフォーマンスと安定性を向上させるための提案を出力します。
-
MySQLTunerスクリプトをダウンロードします:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
スクリプトのアクセス許可を実行可能に変更します:
chmod +x mysqltuner.pl
-
mysqltuner.pl
を実行します 脚本。 MySQL管理ログインとパスワードを入力するように求められます:./mysqltuner.pl
-
スクリプトは、以下の出力のような結果を返します。
MySQLTunerは、データベースのパフォーマンスを向上させる方法に関する提案を提供します。データベースを自分で更新することに慎重な場合は、MySQLTunerの提案に従うことが、データベースのパフォーマンスを向上させるためのより安全な方法の1つです。>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
MySQLのチューニング
MySQL構成を変更するときは、変更とそれがデータベースに与える影響に注意してください。 MySQLTunerなどのプログラムの指示に従う場合でも、プロセスをある程度理解しておくことをお勧めします。
次の場所に保存されているMySQL構成ファイル:/etc/mysql/my.cnf
。
注 MySQL構成を更新する前に、
my.cnf
のバックアップを作成してください ファイル:cp /etc/mysql/my.cnf ~/my.cnf.backup
ベストプラクティスでは、一度に1つずつ小さな変更を加え、変更するたびにサーバーを監視することをお勧めします。変更するたびにMySQLを再起動する必要があります:
systemdを使用したディストリビューションの場合:
systemctl restart mysqld
さまざまな初期化システムを使用するディストリビューションの場合:
service mysql restart
my.cnf
の値を変更する場合 ファイルの場合、変更する行がポンド(#
)でコメントアウトされていないことを確認してください )プレフィックス。
key_buffer
key_buffer
を変更する より多くのメモリをMySQLに割り当てます。これにより、メモリが空いていると仮定して、データベースを大幅に高速化できます。 key_buffer
サイズは通常、MyISAMテーブルエンジンを使用する場合はシステムメモリの25%以下、InnoDBの場合は最大70%を占める必要があります。値の設定が高すぎると、リソースが無駄になります。
MySQLのドキュメントによると、多くのテーブルを備えた256MB(またはそれ以上)のRAMを搭載したサーバーの場合、64Mの設定が推奨されます。 128MBのRAMと少数のテーブルを備えたサーバーは、デフォルト値である16Mに設定できます。リソースとテーブルがさらに少ないWebサイトでは、この値を低く設定できます。
max_allowed_packet
このパラメーターを使用すると、送信可能なパケットの最大サイズを設定できます。パケットは、単一のSQL状態、クライアントに送信される単一の行、またはソースデータベースからレプリカに送信されるログです。 MySQLサーバーが大きなパケットを処理することがわかっている場合は、これを最大のパケットのサイズに増やすのが最善です。この値の設定が小さすぎると、エラーログにエラーが記録されます。
thread_stack
この値には、各スレッドのスタックサイズが含まれます。 MySQLは、thread_stack
のデフォルト値を考慮します 通常の使用には十分な変数。ただし、thread_stack
に関連するエラーが発生した場合 ログに記録されると、これを増やすことができます。
thread_cache_size
thread_cache_size
の場合 が「オフ」(0に設定)の場合、新しい接続を確立するには、新しいスレッドを作成する必要があります。接続が切断されると、スレッドは破棄されます。それ以外の場合、この値は、接続に使用する必要があるまでキャッシュに保存する未使用のスレッドの数を設定します。通常、この設定は、1分あたり数百の接続を受信している場合を除いて、パフォーマンスにほとんど影響しません。その場合、接続の大部分をキャッシュスレッドで確立できるように、この値を増やす必要があります。
max_connections
このパラメータは、同時の最大量を設定します 接続。この数を設定する前に、過去に行った接続の最大数を検討することをお勧めします。そのため、その上限数とmax_connections
の間にバッファがあります。 価値。これは、ユーザーの最大数を示すものではないことに注意してください。 一度にあなたのウェブサイトで;むしろ、リクエストを行うユーザーの最大数を示しています 同時に。
table_cache
この値は、open_tables
よりも高く保つ必要があります 価値。この値を決定するには、次を使用します。
| |
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- MySQLドキュメントライブラリ
- MySQLTuningServerのパラメーター
- MySQLTuner