この記事の例では、MySQL データベース最適化テクノロジの構成方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
(1) データベースアクセスを減らす
静的にできるページについては、できるだけ静的にします
動的ページの静的にできる部分を静的にします
一部のデータは XML として生成することも、テキスト ファイルとして保存することもできます
MemCached などのデータ キャッシュ テクノロジを使用します
(2) 最適化された検出方法
1.ユーザーエクスペリエンスの検出
2.Mysqlステータス検出
Mysql コマンドラインで show status コマンドを使用して、現在の mysql ステータスを取得します。
主に次の属性に焦点を当てます:
key_read_requests (インデックス読み取りリクエストの数) (key_buffer_size 設定の影響を受ける)
key_reads (インデックス読み取り応答の数)
使用されるキーブロック
Qキャッシュ_*
Open_tables (table_cache 設定の影響を受ける)
Opened_tables
テーブルロック
3. サードパーティツールの検出
mysqlreport http://hackmysql.com/mysqlreport
マイトップ http://jeremy.zawodny.com/mysql/mytop/
システムとMysqlログ
システムコマンド: top、sar
Mysql ログ:slow_query.log
(3) ハードウェアの最適化
ハードウェアに関して言えば、Mysql のボトルネックになる可能性が最も高いのはディスクであり、次に CPU、メモリです
ディスクの側面
より高速なディスクを使用すると、Mysql に非常に役立ちます
より多くのハードドライブを使用し、RAID を使用すると、単一ディスクの速度を向上させることができます
Raid方法の場合は、Raid 0+1またはRaid 1+0を使用することをお勧めします
CPU
より高い周波数の CPU とより多くの CPU が Mysql のパフォーマンスを向上させることができることに疑いの余地はありません
高性能
思い出
メモリが増えると、多くの場合、Mysql 内のより多くのデータをメモリにキャッシュできるようになります
ただし、重要な要素は正しい Mysql 設定の必要性です
ネットワークカード
ギガビットネットワークカードとギガビットネットワークを使用する
(4)オペレーティングシステムの最適化
1. スワップ領域を使用しないでください。メモリが不足している場合は、メモリを追加するか、メモリの使用量が少なくなるようにシステムを設定します
2. NFS ディスクを使用しないでください
3. システムと MySQL サーバー上で開いているファイルの数を増やします
ulimit –n 65535を使用してください
4. システム内のプロセスとスレッドの数を増やします。
5. 不要なアプリケーションを終了し、ハードディスクパラメータを最適化し、hdparm を使用してテストします
(5) アプリケーションレベルの最適化
1. マルチサーバー負荷分散を使用する (複数の読み取りと書き込み、データ同期にレプリケーションテクノロジーを使用)
2. テーブルパーティション(カスタムパーティション、mysql5.1で組み込みパーティション機能のサポートを開始)
3. データ キャッシュ テクノロジー memcached を使用する
(6) Mysql設定の最適化
1.key_buffer(=512): インデックスバッファーによって使用されるメモリ量
これは MyISAM テーブルにとって非常に重要であり、Key_read_requests と Key_reads のステータス値を確認して、使用可能なメモリの 25% ~ 30% に設定することをお勧めします。
key_bufferの設定が適切かどうかを知ることができます。 key_reads / key_read_requests の比率はできるだけ低くする必要があります。少なくとも 1:100、1:1000 が望ましいです。そうでない場合は、key_buffer 設定が少し小さすぎることを意味します2.innodb_buffer_pool_size(= 512): インデックスバッファーによって使用されるメモリ量
3.table_cache (=1024): データテーブルキャッシュ領域のサイズ
MySQL がテーブルにアクセスするたびに、テーブル バッファーにスペースがある場合、テーブルが開かれてそこに配置され、テーブルの内容へのアクセスが高速化されます。
ピーク実行時間中に Open_tables と Opened_tables のステータス値を確認することで、table_cache の値を調整する必要があるかどうかを判断できます。
open_tables の値が table_cache と等しいことがわかり、open_tables のステータス値が増加していることがわかった場合は、table_cache パラメーターの値を増やす必要があります。
table_cache パラメータをやみくもに大きな値に設定することはできません。設定値が高すぎると、ファイル記述子が不足し、パフォーマンスが不安定になったり、接続が失敗したりする可能性があります。
4.sort_buffer_size (=256): ソートバッファの長さを指定します
このパラメータに対応する割り当てられたメモリは、各接続に排他的です。接続数が 100 の場合、実際に割り当てられるソート バッファの合計サイズは 100 × 6 = 600MB になります。
したがって、約4GBのメモリを備えたサーバーの場合は、6〜8Mに設定することをお勧めします
5.join_buffer_size: 関連するクエリのバッファーの長さ
4G を超えるメモリ、32M を超えるメモリが推奨されます。このパラメータに対応する割り当てメモリも各接続に排他的です。
6.max_connections (=1024): 再利用できるスレッド数
MySQL サーバーに同時に接続できるクライアントの数は、システムのピーク時の最大同時接続数を観察して推定することで設定できます
7.thread_cache(=*): 再利用できるスレッドの数
通常はCPU数×2に設定されます
8.innodb_buffer_pool_size(= 512): innodb テーブルキャッシュプールサイズ
これは Innodb テーブルにとって非常に重要です。 Innodb テーブルは、MyISAM テーブルよりもバッファリングの影響を受けやすくなります。 MyISAM はデフォルトの key_buffer_size 設定で実行できます。
ただし、Innodb は、デフォルトの innodb_buffer_pool_size 設定ではカタツムリのように動作します。
Innodb はデータとインデックスの両方をキャッシュするため、オペレーティング システムに大量のメモリを残す必要がなく、Innodb のみを使用する必要がある場合は、使用可能なメモリの最大 70 ~ 80% に設定できます。
key_buffer に適用されるいくつかのルールは次のとおりです - データ量が大きくなく、劇的に増加しない場合は、innodb_buffer_pool_size を大きく設定する必要はありません。
9.innodb_flush_logs_at_trx_commit(=1): トランザクションコミット後のログフラッシュモード
Innodb が MyISAM よりも 1000 倍遅いことを心配していますか? このパラメータを変更するのを忘れているのではないかと思われます。デフォルト値は 1 です。これは、コミットされたすべての更新されたトランザクション (またはトランザクション外のすべてのステートメント) がディスクにフラッシュされることを意味します。
そしてこれは、特にバッテリーバックアップキャッシュがない場合、非常にリソースを大量に消費します。多くのアプリケーション、特に MyISAM から変換されたアプリケーションは、その値を 2 に設定するだけです。これは、ログをディスクにフラッシュしないことを意味します。オペレーティング システムのキャッシュにのみフラッシュします。ログは依然として毎秒ディスクにフラッシュされるため、通常は 1 秒あたり 1 ~ 2 回の更新のコストが失われることはありません。 0 に設定すると、はるかに高速になりますが、比較的安全ではありません
MySQL サーバーがクラッシュすると、一部のトランザクションが失われます。オペレーティング システム キャッシュにフラッシュされたトランザクションの部分を失うには、2 に設定します。
さらに MySQL 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください:「MySQL インデックス操作スキルの概要」、「MySQL ログ操作スキルの総合集」、「MySQL トランザクション操作スキルのまとめ」、「 MySQL ストアド プロシージャ スキルの総合集」、「MySQL データベース ロック関連スキルのまとめ」、「よく使われる MySQL 関数のまとめ」
この記事が皆さんの MySQL データベース計画に役立つことを願っています。