MySQLのmy.cnf に日本語コメントを入れてみた
ども、すっかり暑くなりましたね。夜暑くて、寝つきが悪く、この季節は、本当にどろどろした朝をむかえます。 なるべくであればクーラーは使いたくないのですが、とにかく快眠することを優先で考えるのであれば、やはり使っちゃいますよね・・タイマー使って二時間後 に切れるように設定しております。とにかく寝ちゃえばこちらの勝ちです。その代わり、暑くてどろどろした朝をむかえるのは変わらないですが(笑
そしてMySQLの話です・・。ちなみに今回の話は、熱帯夜の話とはぜんぜん関係ありません。
my.cnf のパラメータについて
私だけだと思うのですが、MySQLのパラメータの設定項目の多さにはかなり辛い・・しかしながら、幸いにもMySQLのエキスパートさん達が次々 とパフォーマンスチューニングに関する情報を公開してくれるおかげで、設定を行うこちらがわもだいぶ楽になってきました。本当に感謝です。なので、中山と しても新規でデータベースを構築する際には色々なサイトを参考にしながら、「イケている」設定項目を反映してみたりしています。MySQLの情報量っても のすごく多い。本当にすごいデータベースなんだな、と実感させられます。
しかし・・・
しかしながら、これも私だけだと思うのですが(笑) 一度、my.cnfに設定した内容を次回確認した際に、「あれ?この設定なんの意味があるんだっけ?」と毎回毎回悩んだりします。そうです・・私メモをしても管理するのが苦手なんです・・。 なので、新規でデータベースを構築するたびに、毎回毎回 my.cnfの各パラメータ項目を調べながら設定するわけです。もはや、「ど根性」の世界です。気合だ、気合・・・というわけにもいかず、ドキュメント として管理するのも嫌だけど、毎回毎回達人さんのサイトを回って調べるのもつらい・・・そこで考えました。
my.cnfの中に日本語コメント入れちゃえ!(笑
my.cnf の中に各項目の設定内容は意味を書いてしまえばいいんじゃねーの?ついでに感想も入れておこうっと!・・・・で実際やってみたら、「こりゃいけるわ(笑」と思ったので、my.cnf をアップしてみました。my.cnfのファイルにつきましては、以下のリンクをクリックいただければ取得できます(zip圧縮しております)解凍後、所定のディレクトリに配置し(rpmでのインストールあればきっと /etc/my.cnf mysq) mysqlを再起動してください。
/usr/share/mysql/my-innodb-heavy-4G.cnf のテンプレートをベースに作成しております。また、パラメータの名前を、MySQL5.5用に一部カスタマイズしておりますので、5.5以前のMySQL を利用している方は、エラーがでる可能性があります。
今回のMySQL は以下のような環境です。
OS : CentOS release 5.6 (Final) MEM: 4G MySQL:Server version: 5.5.12 64bit
my.cnf の内容はこんな感じです
以下のように作ってみました、尚、以下のmy.cnf はなんとなく、メモリ4GB でCPU コア1で設定してみました。環境によっては色々直す必要があるかと思いますが適宜修正していただければと思います。
#BEGIN CONFIG INFO #DESCR: 4GB RAM, InnoDB only, ACID, few connections, heavy queries #TYPE: SYSTEM #END CONFIG INFO # my.cnf に日本語でコメントを入れてみました!! # ***************************************************************** # http://www.s-quad.com/ # まったくもって設定値は未保障です!これを設定して、MySQLが動かなくなろうが # 空を飛ぼうが当方はまったく関与しませんのでご注意ください。 # ***************************************************************** # # This is a MySQL example config file for systems with 4GB of memory # running mostly MySQL using InnoDB only tables and performing complex # queries with few connections. # # MySQL programs look for option files in a set of # locations which depend on the deployment platform. # You can copy this option file to one of those # locations. For information about these locations, see: # http://dev.mysql.com/doc/mysql/en/option-files.html # # In this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "--help" option. # # More detailed information about the individual options can also be # found in the manual. # # # The following options will be read by MySQL client applications. # Note that only client applications shipped by MySQL are guaranteed # to read this section. If you want your own MySQL client program to # honor these values, you need to specify it as an option during the # MySQL client library initialization. # [client] #password = [your_password] port = 3306 socket = /var/lib/mysql/mysql.sock # *** Application-specific options follow here *** # # The MySQL server # [mysqld] # コネクションタイムアウト wait_timeout=604800 # generic configuration options port = 3306 socket = /var/lib/mysql/mysql.sock # 名前と後続の括弧の間に余白がない場合、パーサは 無効IGNORE_SPACEを用いることで名前を関数呼び出しと解釈します。 # これは関数名が非表現コンテキストで使用されているときも発生します。 # mysql> CREATE TABLE count(i INT); # ERROR 1064 (42000): You have an error in your SQL syntax ... # near 'count(i INT)' # エラーを取り除き名前を識別子として扱われるようにするには、名前の後に続く余白を使うか、 # 引用符で囲んだ識別子として書き記してください(あるいは両方)。 sql_mode = 'IGNORE_SPACE' # log_slow_queries=/var/lib/mysql/mysqld-slow.log # スローログの出力先を定義するぞ! slow-query-log-file=/var/lib/mysql/mysqld-slow.log # 秒で指定、指定した秒以上のクエリーが発行された場合、上記のスローログに出力する long_query_time=1 # log=/var/lib/mysql/query.log general-log-file=/var/lib/mysql/query.log # デフォルトの文字コードを、UTF-8に設定する skip-character-set-client-handshake character-set-server = utf8 collation-server = utf8_general_ci init-connect = SET NAMES utf8 # back_log is the number of connections the operating system can keep in # the listen queue, before the MySQL connection manager thread has # processed them. If you have a very high connection rate and experience # "connection refused" errors, you might need to increase this value. # Check your OS documentation for the maximum value of this parameter. # Attempting to set back_log higher than your operating system limit # will have no effect. # MySQL が持てる未解決の接続要求の数です。これは MySQL スレッドがとても多くの接続要求をとても短い時間に得た時に働きます。 # 接続のチェックと新しいスレッドの開始はメインスレッドにすこし時間 (しかしとても短い)がかかります。back_log は、 # MySQL が瞬間的に新しい要求への回答を停止する前に、この短い時間の間にスタックできる接続数です。 # 短い期間に多くの接続を期待する場合にだけ、これを増加する必要があります。 他の言葉では、 # TCP/IP 接続の入力 listne キューのサイズです。UNIX システムコール listen(2) のマニュアルページに、 # さらに詳細があります。 この変数の最大値は OS のドキュメントをチェックしてください。 back_log = 50 # Don't listen on a TCP/IP port at all. This can be a security # enhancement, if all processes that need to connect to mysqld run # on the same host. All interaction with mysqld must be made via Unix # sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! #skip-networking # The maximum amount of concurrent sessions the MySQL server will # allow. One of these connections will be reserved for a user with # SUPER privileges to allow the administrator to login even if the # connection limit has been reached. # クライアントからの接続数の上限。 # 無闇に大きくすると、逆にパフォーマンスを落とす原因にもなる。 max_connections = 500 # Maximum amount of errors allowed per host. If this limit is reached, # the host will be blocked from connecting to the MySQL server until # "FLUSH HOSTS" has been run or the server was restarted. Invalid # passwords and other errors during the connect phase result in # increasing this value. See the "Aborted_connects" status variable for # global counter. # これは mysqld が多くの 'hostname' ホストからの接続エラー(max_connect_errors) を受けた場合に発生します。この max_connect_errors # 大量発生後、mysqld は何か(クラッカーによるサーバーへのアタックなど)が起こったと判断し、このホストからの接続をいっさい拒否するよ # うにします。これを解除するには、mysqladmin flush-hosts コマンドを実行します。 # デフォルトでは、10回の接続エラーが発生した場合に、mysqld はそのホストを拒否します。 # この値は以下のようにして簡単に変更できます: max_connect_errors = 10 # The number of open tables for all threads. Increasing this value # increases the number of file descriptors that mysqld requires. # Therefore you have to make sure to set the amount of open files # allowed to at least 4096 in the variable "open-files-limit" in # section [mysqld_safe] # テーブルをオープン状態にする。セッション毎に消費される。 # table_open_cacheのチューニングは、一度に開くテーブル数(joinの数) x セッション数消費 + 5 # mysql> show variables like 'table%cache%'; # +------------------------+-------+ # | Variable_name | Value | # +------------------------+-------+ # | table_definition_cache | 400 | # | table_open_cache | 2048 | # +------------------------+-------+ table_open_cache = 2048 # Enable external file level locking. Enabled file locking will have a # negative impact on performance, so only use it in case you have # multiple database instances running on the same files (note some # restrictions still apply!) or if you use other software relying on # locking MyISAM tables on file level. # システムロックを有効にします。 # Linuxなど、lockd が完全に動作しないシステムでこのオプションを使用すると # mysqldは簡単にデッドロックしてしまいます。 # たくさんのMySQLプロセスからMyISAMテーブルを更新するために # このオプションを使用するなら、 # --delay-key-write=OFF --query-cache-size=0 # というオプションも一緒に使用した方が良いでしょう。 #external-locking # The maximum size of a query packet the server can handle as well as # maximum query size server can process (Important when working with # large BLOBs). enlarged dynamically, for each connection. # クライアントからサーバへ送る場合(BLOB等)の最大サイズを指定する max_allowed_packet = 16M # The size of the cache to hold the SQL statements for the binary log # during a transaction. If you often use big, multi-statement # transactions you can increase this value to get more performance. All # statements from transactions are buffered in the binary log cache and # are being written to the binary log at once after the COMMIT. If the # transaction is larger than this value, temporary file on disk is used # instead. This buffer is allocated per connection on first update # statement in transaction # 未コミットのトランザクション情報をキャッシュしておく。InnoDBなどトランザクション対応のストレージエンジンを使用し、 # かつバイナリログを有効にしている場合にのみ使用される。このサイズを大きくすると、大規模なトランザクション処理を実行する場合に # パフォーマンス低下を防ぐ効果がある binlog_cache_size = 1M # Maximum allowed size for a single HEAP (in memory) table. This option # is a protection against the accidential creation of a very large HEAP # table which could otherwise use up all memory resources. # 共通表式を利用した検索などに有効 tmp_heap_table_size と併せて変更すること max_heap_table_size = 300M # Size of the buffer used for doing full table scans. # Allocated per thread, if a full scan is needed. # インデックスを使用する/しないにかかわらず、全文検索の時に使用される領域。 # テーブル全体をスキャンするSQL文を何度も実行する場合はこの値を調整した方がよい。 # ※「インデックスを使用しない場合に使われる」と書かれている場合もあり、どちらだか分からない。後で調べようと思う。 read_buffer_size = 2M # When reading rows in sorted order after a sort, the rows are read # through this buffer to avoid disk seeks. You can improve ORDER BY # performance a lot, if set this to a high value. # Allocated per thread, when needed. # ソート後にレコードを読むときに使われる領域で、ディスクI/Oが減るためORDER BYの性能向上が期待できる read_rnd_buffer_size = 16M # Sort buffer is used to perform sorts for some ORDER BY and GROUP BY # queries. If sorted data does not fit into the sort buffer, a disk # based merge sort is used instead - See the "Sort_merge_passes" # status variable. Allocated per thread if sort is needed. # ソートの際に利用される領域。ORDER BYやGROUP BYを多用するのであればこの値も増やした方がいい。 # ※この値はコネクション毎に必要になります sort_buffer_size = 8M # This buffer is used for the optimization of full JOINs (JOINs without # indexes). Such JOINs are very bad for performance in most cases # anyway, but setting this variable to a large value reduces the # performance impact. See the "Select_full_join" status variable for a # count of full JOINs. Allocated per thread if full join is found # INDEXが使用されない場合の、テーブル結合時に使われるバッファ。 join_buffer_size = 8M # How many threads we should keep in a cache for reuse. When a client # disconnects, the client's threads are put in the cache if there aren't # more than thread_cache_size threads from before. This greatly reduces # the amount of thread creations needed if you have a lot of new # connections. (Normally this doesn't give a notable performance # improvement if you have a good thread implementation.) # 通常スレッドは、クライアントからの接続ごとに生成され、その後破棄されるが、 # thread_cache_size の数だけ破棄されずに再利用することが出来る。 thread_cache_size = 10 # This permits the application to give the threads system a hint for the # desired number of threads that should be run at the same time. This # value only makes sense on systems that support the thread_concurrency() # function call (Sun Solaris, for example). # You should try [number of CPUs]*(2..4) for thread_concurrency # 再利用するスレッドの数を指定します。接続・切断が多い場合にこの値を大きくすると、 # スレッドの再利用により、スレッド生成のオーバヘッドを抑えることができます。 # CPUの数 * 2 ( /proc/cpuinfo で確認) thread_concurrency = 4 # show variables like 'query_cache_%'; # show status like '%Qcache%'; # 上記のコマンドにて、Qcache_lowmem_prunesの値が、メモリ不足で削除されたなんていう場合は、 # 設定したほうが良いかもしれない # Query cache is used to cache SELECT results and later return them # without actual executing the same query once again. Having the query # cache enabled may result in significant speed improvements, if your # have a lot of identical queries and rarely changing tables. See the # "Qcache_lowmem_prunes" status variable to check if the current value # is high enough for your load. # Note: In case your tables change very often or if your queries are # textually different every time, the query cache may result in a # slowdown instead of a performance improvement. # Ver. 4.0.1 以降では、実行した Query の SQL とその結果をキャッシュし、 # 同じ Query がキャッシュにある場合は、SQL を実行せずに、キャッシュの内容を返す機能がある。 # そのためのバッファの大きさ。サーバ全体で共有される。なお、該当するテーブルの内容が変更された場合には、 # キャッシュもなくなるので、キャッシュによる不具合が生じることはない。 query_cache_size = 64M # Only cache result sets that are smaller than this limit. This is to # protect the query cache of a very large result set overwriting all # other query results. # クエリキャッシュの上限を指定します query_cache_limit = 2M # Minimum word length to be indexed by the full text search index. # You might wish to decrease it if you need to search for shorter words. # Note that you need to rebuild your FULLTEXT index, after you have # modified this value. # 全文検索で認識される最小の文字数の単位 ft_min_word_len = 4 # If your system supports the memlock() function call, you might want to # enable this option while running MySQL to keep it locked in memory and # to avoid potential swapping out in case of high memory pressure. Good # for performance. # オペレーティングシステムによっては、デフォルト (4KB) よりも大きいメモリーページをサポートしている。 # このサポートの実装はハードウェアやオペレーティングシステムに依存します。 # 大量のメモリーアクセスがあるアプリケーションの場合には、大規模ページを使用して、パフォーマンスを改善できる可能性がある。 # つまりトランスレーション・ルックアサイド・バッファー (TLB; Translation Lookaside Buffer) のミスが減る。 #memlock # Table type which is used by default when creating new tables, if not # specified differently during the CREATE TABLE statement. # create table 等で、ENGINEが未指定だった場合のデフォルトのストレージエンジンを指定 default-storage-engine = MYISAM # Thread stack size to use. This amount of memory is always reserved at # connection time. MySQL itself usually needs no more than 64K of # memory, while if you use your own stack hungry UDF functions or your # OS requires more stack for some operations, you might need to set this # to a higher value. # 各スレッドの C スタックの大きさ。crash-me によって検出される多くの制限がこれに依存します。 # デフォルトで通常は十分です。 thread_stack = 192K # Set the default transaction isolation level. Levels available are: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE # 分離レベルの設定 # http://www.s-quad.com/wordpress/?p=956 ここみて頂戴!www # 分離レベルには、上記に示す通り4種類ありまして上から順番により厳格な設定になっております。 # SERIALIZABLE(直列可能) # REPEATABLE-READ (反復可能読み取り) # READ-COMMITTED (コミット読み込み) # READ-UNCOMMITTED (未コミット読み取り) transaction_isolation = READ-UNCOMMITTED # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to disk # based table This limitation is for a single table. There can be many # of them. # 構文実行中にサーバによって自動的にディスクに作成された一時テーブルの数です。 # Created_tmp_disk_tables が大きい場合、原因の一時テーブルをディスクベースの変わりにメモリベースにさせるように、 # 値 tmp_table_size を増やしたいでしょう。 # tmp_table_size メモリ内のテンポラリテーブルがこのサイズを超えると、 # MySQL は自動的にこれをディスク上の MyISAM テーブルに変換する。詳細な GROUP BY クエリを頻繁に行い、 # メモリに余裕がある場合は、tmp_table_size 値を大きくする。 tmp_table_size = 300M # Enable binary logging. This is required for acting as a MASTER in a # replication configuration. You also need the binary log if you need # the ability to do point in time recovery from your latest backup. # バイナリログのベースファイル名を指定します log-bin=mysql-bin # ログのインデックスファイル名を指定します。 log-bin-index=mysql-bin # マスタからのリレーログを指定します relay-log=relay-bin relay-log-index=relay-bin # binary logging format - mixed recommended # バイナリログのフォーマットを指定します。 # ROW ― は行ベース レプリケーションをデフォルトに設定。 # STATEMENT ― はステートメント ベース レプリケーションをデフォルトに設定。 MySQL 5.1.11 以前のフォーマット。 # MIXED ― はミックス ベース レプリケーションをデフォルトに設定。 MySQL 5.1.12 以降のフォーマット。 # ※ 基本的に、mixedでいいんじゃないかな?と思う binlog_format=mixed max-binlog-size = 256M # If you're using replication with chained slaves (A->B->C), you need to # enable this option on server B. It enables logging of updates done by # the slave thread into the slave's binary log. # スレーブ側のログも吐き出しますよという設定 # レプリケーションの設定で、従属的な、レプリケーションを構成している場合などに有効な設定 log_slave_updates # Enable the full query log. Every query (even ones with incorrect # syntax) that the server receives will be logged. This is useful for # debugging, it is usually disabled in production use. #log # Print warnings to the error log file. If you have any problem with # MySQL you should enable logging of warnings and examine the error log # for possible explanations. #log_warnings # Log slow queries. Slow queries are queries which take more than the # amount of time defined in "long_query_time" or which do not use # indexes well, if log_short_format is not enabled. It is normally good idea # to have this turned on if you frequently add new queries to the # system. # スロークエリーログを出力する # スロークエリーログの単位については、long_query_timeに依存 slow_query_log # All queries taking more than this amount of time (in seconds) will be # trated as slow. Do not use "1" as a value here, as this will result in # even very fast queries being logged from time to time (as MySQL # currently measures time with second accuracy only). # 秒で指定します。指定した秒を超えたクエリーは、スロークエリーログとして出力されます long_query_time = 2 # *** Replication related settings # Unique server identification number between 1 and 2^32-1. This value # is required for both master and slave hosts. It defaults to 1 if # "master-host" is not set, but will MySQL will not function as a master # if it is omitted. # MySQLサーバのサーバIDを指定します。id番号は任意です。レプリケーションなどを行っている場合は、IDがダブらないように注意して # ください server-id = 201 # Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # changes in this file to the variable values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # Make the slave read-only. Only users with the SUPER privilege and the # replication slave thread will be able to modify data on it. You can # use this to ensure that no applications will accidently modify data on # the slave instead of the master # スーパーユーザー以外のアカウントでのアクセスはすべて読み取り専用にするよというオプション # レプリケーションでのSLAVEにはこれを適用するとスレーブに書き込む等の不慮の事故を防止することが # 可能になる # read_only #*** MyISAM Specific options # Size of the Key Buffer, used to cache index blocks for MyISAM tables. # Do not set it larger than 30% of your available memory, as some memory # is also required by the OS to cache rows. Even if you're not using # MyISAM tables, you should still set it to 8-64M as it will also be # used for internal temporary disk tables. # 作成したインデックスをメモリ上に維持しておくために、物理メモリ上に確保するバッファの最大値。 # キーを多様するときはこれを大きくするとスピードUPとなります。 # MyISAM テーブルをどのくらい使うかによって、key_buffer_sizeを5~50%割り当てます。 # ただし、key_buffer_size + innodb_buffer_pool_size が80%以下にならなければいけません。 # Key_reads/Key_read_requests によりキャッシュミス率を算出し、 # これを0.003より小さくなるよう、key_buffer_size を割り当てるのが理想らしい。 key_buffer_size = 32M # MyISAM uses special tree-like cache to make bulk inserts (that is, # INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., and LOAD DATA # INFILE) faster. This variable limits the size of the cache tree in # bytes per thread. Setting it to 0 will disable this optimisation. Do # not set it larger than "key_buffer_size" for optimal performance. # This buffer is allocated when a bulk insert is detected. bulk_insert_buffer_size = 64M # This buffer is allocated when MySQL needs to rebuild the index in # REPAIR, OPTIMIZE, ALTER table statements as well as in LOAD DATA INFILE # into an empty table. It is allocated per thread so be careful with # large settings. # MyISAMで以下の時のインデックスのソートに使われるメモリ上の領域です。 # REPAIR TABLE # CREATE INDEX # ALTER INDEX myisam_sort_buffer_size = 5M # The maximum size of the temporary file MySQL is allowed to use while # recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE. # If the file-size would be bigger than this, the index will be created # through the key cache (which is slower). # REPAIR TABLEやLOAD DATAで非常に大きなテーブルを扱う場合、この値を増やしておく myisam_max_sort_file_size = 10G # If a table has more than one index, MyISAM can use more than one # thread to repair them by sorting in parallel. This makes sense if you # have multiple CPUs and plenty of memory. # MyISAMのリカバリに利用する、スレッドの数 myisam_repair_threads = 1 # Automatically check and repair not properly closed MyISAM tables. # MYISAMの自動修復を有効にするか否かのオプション # MYISAMの自動修復は、次回MySQLの再起動時実行されます # ちなみに、 # myisam_recover=FORCE,BACKUP # ・テーブルアクセス時に破損をチェック myisam_recover # *** INNODB Specific options *** # Use this option if you have a MySQL server with InnoDB support enabled # but you do not plan to use it. This will save memory and disk space # and speed up some things. # InnoDB テーブルを使用しない場合は、MySQL オプション設定ファイルに # skip-innodb オプションを指定して InnoDB を動作させないようにできます。 #skip-innodb # Additional memory pool that is used by InnoDB to store metadata # information. If InnoDB requires more memory for this purpose it will # start to allocate it from the OS. As this is fast enough on most # recent operating systems, you normally do not need to change this # value. SHOW INNODB STATUS will display the current amount used. # InnoDBの内部データなどを保持するための領域です。 # それほど大量に割り当てる必要はありません。足りなくなったらエラーログにその旨、警告が出ますので、 # そしたら増やせばいいのではないかと思います。 innodb_additional_mem_pool_size = 16M # InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and # row data. The bigger you set this the less disk I/O is needed to # access data in tables. On a dedicated database server you may set this # parameter up to 80% of the machine physical memory size. Do not set it # too large, though, because competition of the physical memory may # cause paging in the operating system. Note that on 32bit systems you # might be limited to 2-3.5G of user level memory per process, so do not # set it too high. # InnoDB テーブルのデータとインデックスを保存するためのバッファの大きさ。サーバ全体で共有される。 # InnoDB のみの MySQL 専用サーバなら、RAMの 70-80% 位まで上げてもよいらしい。 # MyISAM の key_buffer_size よりも、性能にシビアに影響する。 innodb_buffer_pool_size = 2G # InnoDB stores data in one or more data files forming the tablespace. # If you have a single logical drive for your data, a single # autoextending file would be good enough. In other cases, a single file # per device is often a good choice. You can configure InnoDB to use raw # disk partitions as well - please refer to the manual for more info # about this. # innodbのデータ格納方法を指定する、デフォルトは自動拡張 # 10M 毎に自動拡張する # innodb_data_file_path = ibdata1:10M:autoextend # 300GBをあらかじめ割り当てる、自動拡張はしない # innodb_data_file_path=ibdata1:300G # テーブルスペースを異なるパスに分散する(商用DBでいうところのコンテナの概念に似ているのかな?) # innodb_data_file_path=ibdata1:300G;/data2/ibdata2:700G innodb_data_file_path = ibdata1:10M:autoextend # テーブルごとにテーブルスペースを作成する設定 innodb_file_per_table # Set this option if you would like the InnoDB tablespace files to be # stored in another location. By default this is the MySQL datadir. #innodb_data_home_dir = <directory> # Number of IO threads to use for async IO operations. This value is # hardcoded to 8 on Unix, but on Windows disk I/O may benefit from a # larger number. # 先読みリクエストやdirtyページをバッファキャッシュからディスクに書込むために使われるバックグラウンド # たくさんの遅延があるときの助けとなるパラメータ(SATA writeback キャッシュなしで O_DIRECT を使っているとき、 # ハードウェア RAID write cache なしでO_DIRECT を使っているとき、ネットワーク接続のストレージを使っているとき) innodb_write_io_threads = 8 # 完全テーブルスキャン用の事前フェッチがたくさんあるときの助けとなるパラメータ innodb_read_io_threads = 8 # If you run into InnoDB tablespace corruption, setting this to a nonzero # value will likely help you to dump your tables. Start from value 1 and # increase it until you're able to dump the table successfully. # innoDBの復旧の強制オプション、文書が長いので、詳しくは、 # http://dev.mysql.com/doc/refman/5.1/ja/forcing-recovery.html を見ていただくとして・・・ #innodb_force_recovery=1 # Number of threads allowed inside the InnoDB kernel. The optimal value # depends highly on the application, hardware as well as the OS # scheduler properties. A too high value may lead to thread thrashing. # InnoDBが内部的に利用するスレッド数を指定する innodb_thread_concurrency = 16 # If set to 1, InnoDB will flush (fsync) the transaction logs to the # disk at each commit, which offers full ACID behavior. If you are # willing to compromise this safety, and you are running small # transactions, you may set this to 0 or 2 to reduce disk I/O to the # logs. Value 0 means that the log is only written to the log file and # the log file flushed to disk approximately once per second. Value 2 # means the log is written to the log file at each commit, but the log # file is only flushed to disk approximately once per second. # innodb_flush_log_at_trx_commitは、InnoDBのログバッファ #(注3)をInnoDBログファイル(注4)に書き込むタイミングと、 # InnoDBログファイルをディスクにフラッシュするタイミングとを指定するパラメータです。 # -------------------------------------------------------------------- # 設定値 ログバッファ→ログファイル ディスクフラッシュ # -------------------------------------------------------------------- # 0 毎秒 毎秒 # 1 (初期値) COMMIT時 COMMIT時 # 2 COMMIT時 毎秒 # -------------------------------------------------------------------- # たとえ「パフォーマンス向上のために」という理由があっても、安易に1以外にしてはいけません。よほど特別な理由がない限り1のままにしておくべきです。 # なぜこれほどまでに1以外をすすめないのでしょうか? それはInnoDBのデータファイルがディスクにフラッシュされるタイミングを知れば納得していただけると思います。 # メモリ上にあるInnoDBバッファプールがディスク上のInnoDBデータファイルにフラッシュされます。バッファプールは初期化パラメータinnodb_buffer_pool_sizeで # 大きさを指定するもので、データファイルはinnodb_data_file_pathで指定する最終的にデータが格納されるディスク上のファイルです。 innodb_flush_log_at_trx_commit = 1 # Speed up InnoDB shutdown. This will disable InnoDB to do a full purge # and insert buffer merge on shutdown. It may increase shutdown time a # lot, but InnoDB will have to do it on the next startup instead. # InnoDB ログ ファイルの数やサイズを変更したい時に利用される項目 # たぶんですが、未コミットのトランザクションログ(WAL:Write Ahead Log)をデータに書き込むとか書き込まないとかを # パラメータの値によって決めるものではないかと思う # MySQLサーバを普通にシャットダウンした場合でも、WALにはテーブルスペースに反映されていないデータが残っている。 # シャットダウンと同時にテーブルスペースへデータを反映させるには、innodb_fast_shutdown=0を設定すれば良い。 # このオプションはMySQLサーバ稼働中に変更できるので、以下のようにしてからシャットダウンすると、WALを削除しても安全な状態になる。 #innodb_fast_shutdown # The size of the buffer InnoDB uses for buffering log data. As soon as # it is full, InnoDB will have to flush it to disk. As it is flushed # once per second anyway, it does not make sense to have it very large # (even with long transactions). # InnoDBの更新ログを記録するメモリ上の領域です。 # たいていは8MB、多くても64MBで十分で、あんまり多くする必要はありません。 # なぜなら、バッファはトランザクションがCOMMITされるごと、 # または毎秒ディスクにフラッシュされるので、ほかのパラメータを厚くしたほうが得策です。 innodb_log_buffer_size = 8M # Size of each log file in a log group. You should set the combined size # of log files to about 25%-100% of your buffer pool size to avoid # unneeded buffer pool flush activity on log file overwrite. However, # note that a larger logfile size will increase the time needed for the # recovery process. # データの書き込み、得に大きなサイズのデータの書き込み性能に影響する。 # ただし、大きなサイズほどデータのリカバリ時間を要する。サイズを変更する場合、正常停止後、 # 作成済みのログファイル(デフォルトは /var/lib/mysql/ib_logfileX)を削除し、mysqlサーバを起動しなおす必要がある。 innodb_log_file_size = 256M # Total number of files in the log group. A value of 2-3 is usually good # enough. innodb_log_files_in_group = 3 # Location of the InnoDB log files. Default is the MySQL datadir. You # may wish to point it to a dedicated hard drive or a RAID1 volume for # improved performance #innodb_log_group_home_dir # Maximum allowed percentage of dirty pages in the InnoDB buffer pool. # If it is reached, InnoDB will start flushing them out agressively to # not run out of clean pages at all. This is a soft limit, not # guaranteed to be held. # バッファープール内のダーティページをパージするクリーンナップする割合を指定?かな?・・・ innodb_max_dirty_pages_pct = 90 # The flush method InnoDB will use for Log. The tablespace always uses # doublewrite flush logic. The default value is "fdatasync", another # option is "O_DSYNC". # nnodb_flush_methodがfdatasyncの場合(これが初期値です)、データファイルとログファイルを # ディスクにフラッシュするのにfsync(2)を使います。 # O_DSYNCの場合は、データファイルをフラッシュするのにfsync(2)を使うのは変わらないのですが、ログファイルを同期モード(openするときにO_SYNCを指定する)で開きます。 # 同期モードでファイルを開いた場合、そのファイルに何か書いたらディスクにきっちり書き込まれることになっています。 # O_DIRECTの場合は、fdatasyncと同じようにデータファイルとログファイルをfsync(2)でフラッシュするのですが、データファイルを開くときにO_DIRECTを指定します。 # O_DIRECTはLinux固有のフラグで、OSのバッファキャッシュの効果を最小化する効果があります。O_DIRECTを指定すると一般的に読み書き性能は低下するのですが、 # アプリケーションが独自にキャッシュのメカニズムを持っている場合に、OSとアプリケーションとで二重にキャッシュするのを避けるために使われます。 # 3つの設定値の違いを見たわけですが、ここでは # - 設定によってディスクへフラッシュする方法が変えられる # - フラッシュしていないデータはOSクラッシュ時に失われる可能性がある #innodb_flush_method=O_DSYNC # How long an InnoDB transaction should wait for a lock to be granted # before being rolled back. InnoDB automatically detects transaction # deadlocks in its own lock table and rolls back the transaction. If you # use the LOCK TABLES command, or other transaction-safe storage engines # than InnoDB in the same transaction, then a deadlock may arise which # InnoDB cannot notice. In cases like this the timeout is useful to # resolve the situation. # InnoDB トランザクションがロール バックされる前に、ロックを待つ秒数でのタイムアウト。 # InnoDB は自動的にそれ自体のロック テーブル内でトランザクション デッドロックを検出し、 # トランザクションをロールバックします。InnoDB は LOCK TABLES ステートメントを利用してロック # セットを通知します。デフォルトは50秒です。 innodb_lock_wait_timeout = 120 [mysqldump] # Do not buffer the whole result set in memory before writing it to # file. Required for dumping very large tables quick # 現在のMySQLのプロトコル仕様により定められた,クライアントからサーバへ送ることができるPacketの最大サイズを指定 # デフォルトでは、1MB、16Mのパケットってどんなだ(笑 画像や動画等のバイナリファイルでも送るのでしょうか? max_allowed_packet = 16M [mysql] # コマンドの保管を有効にするか無効にするか。こんなオプションあったんだ・・ # no-auto-rehash auto-rehash # Only allow UPDATEs and DELETEs that use keys. #safe-updates [myisamchk] #key_buffer #検索に使われるインデックスをバッファに保存する際のメモリサイズです。 #メモリに余裕がある場合増やすとパフォーマンスが向上します。 #MySQL ABでは,マシンに搭載しているメモリーの1/4を推奨値としている。 key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] # Increase the amount of open files allowed per process. Warning: Make # sure you have set the global system limit high enough! The high value # is required for a large number of opened tables open-files-limit = 8192
*パラメータの値については、みなさまの環境にあわしてくださいね(別にチューニングしているわけでありませんので) *日本語のコメントにつきましては、色々なサイトを参考にコピペしたものや、自分の感想や感覚で書かれているものがありますので適宜修正してください。
そもそも、もとから英語でコメント書いてあるので、英語が読める方はまったく必要性を感じない投稿ですみません・・。