今日は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_threads、innodbwrite_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計算機を使用する必要があります。これにより、主要なパラメーターがわかり 、使用可能なメモリを超えないようにすることができます。結局のところ、すべてがそれに依存してい
ます。ご清聴ありがとうございました。ディスカッションに参加してください。