2012-03-29 19 views
10

テーブル(ALTER TABLE foo ENGINE = INNODB)をある期間後に再パックしたり、INSERT/UPDATEの後に多数のパフォーマンスを向上させると、/DELETEs。私はこれがindiciesなどが再構築されているか、またはテーブルスペースを圧縮しているか、または何か他のものがあるかどうかわかりません。ロックテーブルを使用したInnoDBテーブルの最適化

それは、 ALTER TABLE fooのエンジンのようなものをやってする= InnoDBがしかし、OPTIMIZEまたはALTERが受け入れられないのテーブルをロックし使用して、ルーティングテーブルのメンテナンスの一部であるべきことを私を打つとして行うには良い方法があるあります1つのデータベースサーバー(別のインスタンスにフェイルオーバーしないことを意味します)を使用して、テーブル全体をロックしないでください。

更新:5.5.17-55

更新Perconaを使用した:SHOW変数 'のInnoDB%' のような。

+----------------------------------------+------------------------+ 
| Variable_name       | Value     | 
+----------------------------------------+------------------------+ 
| innodb_adaptive_checkpoint    | estimate    | 
| innodb_adaptive_flushing    | OFF     | 
| innodb_adaptive_hash_index    | ON      | 
| innodb_additional_mem_pool_size  | 8388608    | 
| innodb_auto_lru_dump     | 120     | 
| innodb_autoextend_increment   | 8      | 
| innodb_autoinc_lock_mode    | 1      | 
| innodb_buffer_pool_shm_checksum  | ON      | 
| innodb_buffer_pool_shm_key    | 0      | 
| innodb_buffer_pool_size    | 30064771072   | 
| innodb_change_buffering    | inserts    | 
| innodb_checkpoint_age_target   | 0      | 
| innodb_checksums      | ON      | 
| innodb_commit_concurrency    | 0      | 
| innodb_concurrency_tickets    | 500     | 
| innodb_data_file_path     | ibdata1:10M:autoextend | 
| innodb_data_home_dir     |      | 
| innodb_dict_size_limit     | 0      | 
| innodb_doublewrite      | ON      | 
| innodb_doublewrite_file    |      | 
| innodb_enable_unsafe_group_commit  | 0      | 
| innodb_expand_import     | 0      | 
| innodb_extra_rsegments     | 0      | 
| innodb_extra_undoslots     | OFF     | 
| innodb_fast_checksum     | OFF     | 
| innodb_fast_recovery     | OFF     | 
| innodb_fast_shutdown     | 1      | 
| innodb_file_format      | Antelope    | 
| innodb_file_format_check    | Barracuda    | 
| innodb_file_per_table     | ON      | 
| innodb_flush_log_at_trx_commit   | 0      | 
| innodb_flush_log_at_trx_commit_session | 3      | 
| innodb_flush_method     | O_DIRECT    | 
| innodb_flush_neighbor_pages   | 1      | 
| innodb_force_recovery     | 0      | 
| innodb_ibuf_accel_rate     | 100     | 
| innodb_ibuf_active_contract   | 1      | 
| innodb_ibuf_max_size     | 15032369152   | 
| innodb_io_capacity      | 200     | 
| innodb_lazy_drop_table     | 0      | 
| innodb_lock_wait_timeout    | 50      | 
| innodb_locks_unsafe_for_binlog   | OFF     | 
| innodb_log_block_size     | 512     | 
| innodb_log_buffer_size     | 67108864    | 
| innodb_log_file_size     | 402653184    | 
| innodb_log_files_in_group    | 2      | 
| innodb_log_group_home_dir    | ./      | 
| innodb_max_dirty_pages_pct    | 75      | 
| innodb_max_purge_lag     | 0      | 
| innodb_mirrored_log_groups    | 1      | 
| innodb_old_blocks_pct     | 37      | 
| innodb_old_blocks_time     | 0      | 
| innodb_open_files      | 300     | 
| innodb_overwrite_relay_log_info  | OFF     | 
| innodb_page_size      | 16384     | 
| innodb_pass_corrupt_table    | 0      | 
| innodb_read_ahead      | linear     | 
| innodb_read_ahead_threshold   | 56      | 
| innodb_read_io_threads     | 4      | 
| innodb_recovery_stats     | OFF     | 
| innodb_replication_delay    | 0      | 
| innodb_rollback_on_timeout    | OFF     | 
| innodb_show_locks_held     | 10      | 
| innodb_show_verbose_locks    | 0      | 
| innodb_spin_wait_delay     | 6      | 
| innodb_stats_auto_update    | 1      | 
| innodb_stats_method     | nulls_equal   | 
| innodb_stats_on_metadata    | ON      | 
| innodb_stats_sample_pages    | 8      | 
| innodb_stats_update_need_lock   | 1      | 
| innodb_strict_mode      | OFF     | 
| innodb_support_xa      | ON      | 
| innodb_sync_spin_loops     | 30      | 
| innodb_table_locks      | ON      | 
| innodb_thread_concurrency    | 8      | 
| innodb_thread_concurrency_timer_based | OFF     | 
| innodb_thread_sleep_delay    | 10000     | 
| innodb_use_purge_thread    | 1      | 
| innodb_use_sys_malloc     | ON      | 
| innodb_use_sys_stats_table    | OFF     | 
| innodb_version       | 1.0.16-12.8   | 
| innodb_write_io_threads    | 4      | 
+----------------------------------------+------------------------+ 
+0

使用しているMySQLのバージョンは? – RolandoMySQLDBA

+0

MySQLのバージョン – Jeremy

+0

を含む質問が更新されました。これをあなたの質問に追加してください: 'SHOW VARIABLES LIKE 'innodb%';' – RolandoMySQLDBA

答えて

24

あなたが変更したり、それをロックせずにテーブルを最適化することはできません。しかし、Percona Toolkitのpt-online-schema-changeツール(免責事項:私の雇用主)では、これを行うことができ、それは非常にうまく機能します。

pt-online-schema-change <options> --alter='ENGINE=InnoDB' 

http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

+0

私は明確にするために質問を更新しました。私はpt-online-schema-changeを見ていきます。 – Jeremy

+0

まさに私が探していたもの、ありがとう。 – Jeremy

+0

ドキュメントを読んで、私はInnoDBテーブル(外字キー付き)でこのツールを使用しません。 http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html#cmdoption-pt-online-schema-change--alter-foreign-keys-methodを確認してください。 –

1

基本的には、テーブル上でOPTIMIZEを実行しています。 InnoDBテーブルの場合、OPTIMIZEALTER TABLEにマップされます。

INTIDBテーブルの場合、OPTIMIZE TABLEはALTER TABLEにマップされ、テーブルを再構築してインデックス統計を更新し、クラスタ化インデックスの未使用領域を解放します。

テーブルを1/2削除すると、OPTIMIZEが本当に良いアイデアです。

私はパフォーマンスを改善するための提案をします。新しいファイル形式BARRACUDAをご使用の設定でサポートしていることを確認してください。圧縮された行を使用した場合、個人的な経験から、

ALTER TABLE x ROW_FORMAT=COMPRESSED; 

ROW_FORMAT = COMPRESSED利用可能な新しいを使用するようにテーブルを変更し、その後

innodb_file​_format=Barracuda 

サーバーを再起動すると:それは本当に簡単で有効、ちょうどあなたのmy.cnfに追加フォーマットでは、テーブルサイズが半減し、パフォーマンスにも大きなプラスの影響があります。詳細については

はthroug行くしてみてください。

http://dev.mysql.com/doc/refman/5.5/en/innodb-compression-usage.html

http://www.mysqlperformanceblog.com/2008/04/23/testing-innodb-barracuda-format-with-compression/

+0

新しいファイル形式または行圧縮を使用することには欠点がありますか? – Jeremy

+0

CPU使用量はわずかに増加するはずですが、私が見たすべてのテストでは、欠点がないことが示されています。古いフォーマットの "Antelope"は、古いMySQLバージョンとの互換性のために、デフォルトで保持されています。新しいBarracudaファイルフォーマットは、次の主要なMySQLリリースではデフォルトになりそうです。 – capi

+0

圧縮された行フォーマットを有効にした経験では、平均行長が十分に大きい場合( 'SHOW TABLE STATUS LIKE 'table_name''をチェックしてください)、長文のテキストフィールドが少なくとも1つあれば意味があります。 –

10

のMySQL 5.6.17からは、MySQLはデフォルトでInnoDBテーブルのオンライン最適化をサポートしています。テーブルを最適化するには、単にこのようなものを使用します。

関連する問題