MySQLのチューニング

MySQLは初期設定ですと、メモリの割り当て等の環境設定が何もされていません。そこでサンプルで用意されているファイルを使って、MySQLをチューニングしてみましょう。

サンプルのファイルは、

[ /usr/share/mysql ]

にあります。このディレクトリにある以下のファイルがサンプルです。
my-small.cnf
my-medium.cnf
my-large.cnf
my-huge.cnf
my-innodb-heavy-4G.cnf

このファイルを目的に合わせて、

[ /etc/my.cnf ]

として保存します。そして MySQL を再起動すれば、設定が反映されます。

それぞれのファイルは、

my-small.cnf
64MB以下のメモリを搭載したPC

my-medium.cnf
128MB以下のメモリを搭載したPC

my-large.cnf
512MB以下のメモリを搭載したPC

my-huge.cnf
1GB~2GB以下のメモリを搭載したPC

my-innodb-heavy-4G.cnf
4GBのメモリとInnoDBで作成されたデータベースによって構築されたPC

各パラメータの意味、

port = 3306
起動ポート番号です。セキュリティ面から変更しておいた方がよい場合も…。

key_buffer = 256M
検索に使われるインデックスをバッファに保存する際のメモリサイズを設定します。メモリに余裕がある場合はより沢山指定しましょう。

max_allowed_packet = 1M
入力データ保持の最大バッファサイズを設定します。画像などの大きなデータを挿入する場合は、この制限に引っ掛かる可能性がありますので気をつけて下さい。

table_cache = 256
頻繁なアクセスに対して使うデータキャッシュを設定します。これによってディスクのI/O負荷を減らすことができます。

sort_buffer_size = 1M
並べ替えのバッファサイズを設定します。値を大きくすることで ORDER BY や GROUP BY といった並べ替えクエリーの速度を上げることができます。

read_buffer_size = 1M
読み込みのバッファサイズを設定します。値を大きくすることでインデックスを含まないクエリーの実行速度を上げることができます。

InnoDB_sort_buffer_size = 64M
InnoDBで使用する並べ替えのバッファサイズを設定します。

thread_cache = 8
スレッド生成のキャッシュサイズを設定します。クライアントからの接続を受けると、スレッドが生成され、そのスレッドがクライアントのSQL分を処理します。クライアントの接続が多い場合に有効です。

query_cache_size= 16M
クエリのキャッシュサイズを設定します。同じクエリを何度も実行する場合に有効です。

thread_concurrency = 8
同時に実行するスレッド数を指定します。

join_buffer_size = 131072
完全結合(インデックスを使用しない場合)のバッファサイズを設定します。インデックスが使用できない場合に有効です。

基本的な設定は以上です。

===============================

大量データを処理するため、全文検索エンジンを入れる

yumで要るものを全部入れる。

  1. yum install mecab
  2. yum install mecab-ipadic
  3. yum install senna
  4. yum install MySQL-shared
  5. yum install MySQL-client
  6. yum install MySQL-server
yum install mecab
yum install mecab-ipadic
yum install senna
yum install MySQL-shared
yum install MySQL-client
yum install MySQL-server

mysql -urootでログインして、↓このように”Tritonn Project”のバージョンが表示されればOK。 mysql -Vでは表示されないので注意。

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2419
Server version: 5.0.51a-modified-log MySQL Community Server (GPL) (portions (c) Tritonn Project)

Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.

mysqlインストール後の儀式、rootのパスワードを変更する。
mysqladmin -u root password パスワード

次にmy.cnfを設定する。
/usr/share/mysql/にある雛形を使ってmy.cnfを作成する。雛形はサーバスペックにあわせて選ぶ。意味なく大きいのにしないこと。
my.cnf雛形選択の目安
my-small.cnf 64Mバイト以下のメモリの小規模サーバー向け
my-medium.cnf 32M~64Mバイトのメモリを持つMySQL専用サーバーか、128Mバイトのメモリを持つサーバー向け
my-large.cnf 512Mバイト程度のメモリを持ち、MySQL専用となる機械向け
my-huge.cnf 1G~2Gバイトのメモリを持つMySQL専用サーバー向け
my-innodb-heavy-4G.cnf 4Gバイトのメモリ、InnoDBのみ、ACID、少ない接続、大量のクエリ

/etc/my.cnfを作る
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

デフォルトUTF8で使うときの文字コードの設定をmy.cnfに追加する
/etc/my.cnf
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8