MySQL最適化コンプレックス

こんにちは、Habrovitesさん。



今日はmySQLについて何度も話します。最適化を理解し、多くのサーバーパラメータについて話しましょう。

始めましょう。



開始



CentOS上に配置するサーバー my.cnfの設定を編集する方法を最適化し ます。



一部のパラメータを設定する

と、サーバーデータベースのパフォーマンスが数倍向上する可能性 があります。



まず、一般的に最適化するものを決定しましょう。つまり、どのエンジンにいくつのテーブルがあるか、どのハードウェアがあるか、どのパラメーターの下で全体を調整するかを決定しましょう。



このために、 htopを(美しく直感的なツールとして)使用します。



yum install htop
      
      





htopを派生さ せる



htop
      
      





私たちはこのようなものを手に入れ

ますmy.cnfに自分自身を書いてください



# 3 , 4   
      
      





それでは、テーブルの数とそのタイプを調べてみましょう。

このために 、mysqlチューナーを使用します。



wget https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl
      
      





実行しましょう:



perl mysqltuner.pl
      
      





おおよその結論: my.cnfで



画像



自分自身に書きましょう



# 64M myisam, 770M innoDB
      
      





通常、次のような一般的な構成をお勧めします。



[client] 
port                        = 3306 
socket                      = /var/run/mysqld/mysqld.sock 

[mysqld_safe] 
socket                      = /var/run/mysqld/mysqld.sock 
nice                        = 0 
 
[mysqld] 
user                        = mysql pid-file                    = /var/run/mysqld/mysqld.pid 
socket                      = /var/run/mysqld/mysqld.sock 
port                        = 3306 
basedir                     = /usr 
datadir                     = /var/lib/mysql 
tmpdir                      = /tmp 
language                    = /usr/share/mysql/english 
old_passwords               = 0 
bind-address                = 127.0.0.1 
 
skip-external-locking 
 
max_allowed_packet          = 16M 
key_buffer_size             = 16M 
innodb_buffer_pool_size     = 2048M 
innodb_file_per_table       = 1 
innodb_flush_method         = O_DIRECT 
innodb_flush_log_at_trx_commit  = 0 
 
max_connections             = 144    <a 
href="https://ruhighload.com/query_cache_size+%d0%bf%d0%b0%d1
%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80+%d0%b2+mysql" 
target="_blank" style="color: rgb(232, 95, 99);">query_cache_size</a> 
= 0 slow_query_log              = /var/log/mysql/mysql-slow.log 
long_query_time             = 1 
 
expire_logs_days            = 10 
max_binlog_size             = 100M 
 
[mysqldump] 
quick 
quote-names 
max_allowed_packet          = 16M
      
      





ここで、ここで何を最適化するのか、なぜ、どのように、そしてなぜ(特にこれらのパラメーターが十分でないのか)を理解しましょう。



最適化と構成



まず、mysqlチューナー出力の一番下までスクロールして、推奨される内容を確認できます 私たちの場合、次のようになります。



wget 
https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl 
perl mysqltuner.pl
      
      





画像



私たちは無意識の置換に従事せず、最初に私たちが興味を持つかもしれないmysqlのパラメータを調べます 。内容:

skip-external-locking、-外部ロックを削除します。これはより高速です。

-name-RESOLVEをスキップし、 -ことができます MySQLは、要求への回答避けるために、 DNSサーバーへのクライアント接続のチェック MySQLを



したがって、サーバー MySQL、ホスト名ではなく

IP URLのみを使用します、少し高速です。



binlog_cache _ size、-変更をバイナリログに保存するキャッシュのサイズ。トランザクションキャッシュのみのサイズを設定します。ドゥ 100Mは-もはや必要ありません。



innodb_stats_on_metadata = 0(OFF)、-

INFORMATION_SCHEMAで高速化するには 、SHOW



TABLESTATUSまたはSHOWINDEXは、quer y _cache_size = 128Mやquery_sache_type

= 1
などの関数の統計の更新を無効にします 、-キャッシュを要求します。 1-原則として有効、 128Mの制限。詰まりにつながる可能性があるため、256M

を超えて配置することお勧めし ません



InnoDBテーブル以上のものがあるため cache _ sizebedが消えます

バージョンMySQL5.6 query_cache_sizeをオフにし、バージョン8.0を



デフォルトで削除すると 、すべてのテーブルとインデックスが1つのファイルに保存されるため、innodb_file_per_table = 1 を使用し ます



。値 innodb_open_filesとtable_open_cache-両方のオプションを4096または で設定することをお勧めします。 8192。一般に、すべてのベースのテーブル数に2を掛けたものとして計算され ます。



で作業するとき InnoDBは、最も重要なパラメーター innodb_buffer_pool_sizeであり、「多ければ多いほど良い」という原則に基づいて設定されます。サーバーのRAMの最大70〜80%を割り当てることをお勧めし ます。



innodb_log_file_size-書き込み速度に影響を与え、操作ログのサイズを設定します(操作は最初にログに書き込まれ、次にディスク上のデータに適用されます)。このログが大きいほど、レコードの動作が速くなります(ログファイルに多くのレコードがあるため)。常に2つのファイルがあり、それらのサイズは同じです。パラメータ値は、1つのファイルのサイズを設定します。



!️ innodb_log_file_size MySQL, ib_logfile-n ( /var/lib/mysql/), innodb_log_file_size MySQL.

MySQL - .


大きなサイズのinnodb_log_file_sizeをインストールすると 、パフォーマンスが向上する可能性がありますが、同時にリカバリ時間が長くなります。256Mから 1Gまで選択してください



innodb_log _buffer_size-トランザクションバッファーのサイズ。BLOBおよび TEXTラージを使用しない場合は、通常、適用しないことをお勧めします



innodb_flush _ method、-データをディスクにフラッシュするためのロジックを定義します。RAIDとバックアップサイトを使用する最新のシステムで は、ODSYNCから選択します および ODIRECT、-最初のパラメータはより速く、2番目はより安全です。



_ size bed key_buffer-キーとインデックスを操作するためのバッファー、および sort_buffer-ソートのためのバッファー。MyISAMテーブルを使用していない場合は 一時テーブルインデックスを格納するためにkey_buffer_sizeを32MBに設定することをお勧めし ます





パラメータ thread_cache_ sizeは、クライアントが切断したときにキャッシュを離れるスレッド(スレッド)の数を示します。新しい接続では、スレッドは作成されませんが、キャッシュから取得されます。これにより、高負荷時にリソースが節約されます。



innodb_flush_log_attrx_commit、-データレコードのスループットをベースの数百倍に増やすことができます。Mysqlが各操作をディスク(ログファイル)にダンプするかどうかを決定し ます。



innodb_flush_log_at_trx_commit = 1

、データ保持が最優先事項である場合使用され ます。 小さなデータ損失が重大ではない場合は、



innodb_flush_log_at_trx_commit = 2です。 0(ゼロ)もあります-最も生産的ですが、安全ではないオプションです。



max_connections- 「接続が多すぎますというエラーが表示された場合 このオプションを増やす必要があります。したがって、それによる最適化には大きなメリットはありません。



InnoDBストリーム内の入力/出力ファイルの数はオプションinnodb_read_io_threadsinnodbwrite_io_threads指定され 、このパラメーターは通常4または 8に設定されSSD16で設定され た高速ROMです。意味 innodb_thread_concurrencyはコアの数を設定します * 2



構成は次のようになります。



[client] 
port                        = 3306 
socket                      = /var/run/mysqld/mysqld.sock 
 
[mysqld_safe] 
socket                      = /var/run/mysqld/mysqld.sock nice                        = 0 
 
[mysqld] 
user                        = mysql 
pid-file                    = /var/run/mysqld/mysqld.pid 
socket                      = /var/run/mysqld/mysqld.sock 
port                        = 3306 
basedir                     = /usr 
datadir                     = /var/lib/mysql 
tmpdir                      = /tmp 
language                    = /usr/share/mysql/english 
old_passwords               = 0 
bind-address                = 127.0.0.1 
 
skip-external-locking  
skip-name-resolve 
 
binlog_cache_size = 100M 
thread_cache_size = 32 
 
innodb_stats_on_metadata = OFF 
 
query_cache_limit = 1M 
query_cache_size = 0 query_cache_type = 1 
 
innodb_buffer_pool_size = 3G 
innodb_log_file_size = 256 
innodb_log_buffer_size = 6M 
innodb_additional_mem_pool_size = 16M 
innodb_flush_method = O_DSYNC 
innodb_flush_log_at_trx_commit = 0 
innodb_thread_concurrency = 6 
innodb_file_per_table = 1 

 
key_buffer_size = 32M 
tmp_table_size = 64M 
max_connections = 350 
sort_buffer_size = 16M read_buffer_size = 1M 
read_rnd_buffer_size = 1M 
join_buffer_size = 8M 
thread_stack = 1M 
binlog_cache_size = 8M 
 
tmp_table_size = 128M 
table_open_cache = 2048 
 
[mysqldump] quick 
quote-names 
max_allowed_packet = 16M
      
      





そして最後に、チューナーの推奨事項を確認し、それに従うことができます。



結論



これがそのような興味深い設定であることが判明しました。難しい場合は、最初にmySQL計算機を使用する必要があります。これにより、主要なパラメーターがわかり 、使用可能なメモリを超えないようにすることができます。結局のところ、すべてがそれに依存してい



ます。ご清聴ありがとうございました。ディスカッションに参加してください。



All Articles