単一のコア以上を使用しない専用のMySQLサーバーをいくつか紹介しました。私はMySQLのDBAよりも開発者なので、助けが必要です
セットアップ
サーバーは、OLAP / DataWarehouse(DW)タイプのロードでは非常に大きくなります。
- プライマリ:96GB RAM、8コア+シングルRAID 10アレイ
- テスト:4コアの32GB RAM
- 最大のDBは540 GBで、合計は約1.1TBで、ほとんどがInnoDBテーブルです
- Solaris 10 Intel-64
- MySQL 5.5.x
注:最大のDBはOLTP DRサーバーから複製されたものであり、DWはこれからロードされます。完全なDWではありません。6か月から6週間で終了するため、OLTP DBよりも小さくなります。
テストサーバーでの観察
- 3つの個別の接続
- それぞれに同時(および異なる)があります
ALTER TABLE...DROP KEY...ADD INDEX
- 3つのテーブルには250万行、380万行、450万行があります
- CPU使用率は最大25%になり(1つのコアが最大になります)、それ以上はなりません
- 3回のALTERには12〜25分かかります(最小の1つに4.5分かかります)。
ご質問
- 複数のコアを使用するには、どのような設定またはパッチが必要ですか?
つまり、なぜMySQLは利用可能なすべてのコアを使用しないのですか?(他のRDBMSと同様) - レプリケーションの結果ですか?
その他の注意事項
- RDBMS「スレッド」とOS「スレッド」の違いを理解しています
- 私はどんな形の並列性についても尋ねていません
- InnoDBとスレッドのシステム変数のいくつかは次善の策です
(クイックウィンを探しています) - 短期的には、ディスクレイアウトを変更できません
- 必要に応じてOSを調整できます
- 最小のテーブル上の単一のALTER TABLEには4.5分かかります(IMOに衝撃を与えます)
編集1
- innodb_thread_concurrencyは両方で8に設定されます。はい、間違っていますが、MySQLが複数のコアを使用することはありません
- innodb_buffer_pool_sizeはプライマリで80GB、テストで10GBです(別のインスタンスはシャットダウンされます)。これは今のところ大丈夫です。
- innodb_file_per_table = ON
編集2
- innodb_flush_log_at_trx_commit = 2
- innodb_use_sys_malloc = ON
- innodb_flush_methodはO_DIRECTである必要があります(ただし、SHOW VARIABLESはこれを表示しません)
- innodb_doublewrite = OFF
- ファイルシステム= ZFS(そして、私のシステム管理者はこれを見つけました:http : //blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices)
テストする
- innodb_flush_methodは、あるべきときにO_DIRECTとして表示されない
- RolandoMySQLDBAの設定に従います
重要なものを見逃したかどうか教えてください
乾杯
更新
変更されたinnodb_flush_method + RolandoMySQLDBAの回答の3 xスレッド設定
結果:>テストに使用された1コア=肯定的な結果
\G
。また、私は思うSHOW INNODB STATUS
の賛成で廃止されましたSHOW ENGINE INNODB STATUS
(私は、コマンドラインで、元の実行中にエラーを取得し5.5で。