Upgrade to Pro — share decks privately, control downloads, hide ads and more …

My MySQL Best Practices

My MySQL Best Practices

Satoshi MITANI

March 21, 2017
Tweet

More Decks by Satoshi MITANI

Other Decks in Technology

Transcript

  1. みんなBest Practice おさらい • @yoku0825 • MySQL パターン • https://www.slideshare.net/yoku0825/mysql-71661984

    • アンリーダーブルSQL • RDBMS・ザ・オラクルマシン etc… • @sodai1025 • Web エンジニアに知ってほしいRDBアンチパターン • http://soudai.hatenablog.com/entry/2017/03/04/190000 3
  2. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 6
  3. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 7
  4. MySQL の得意分野 9 OLTP系 ワークロード OLTP系 ワークロード DWH系 ワークロード DWH系

    ワークロード テーブル テーブル • Online Transaction Processing • オンライン処理 • 結果をすぐ返す • 多数の行のうち 少数の行の複数のカラムに注目 • よくアクセスされる行と そうでない行がある • Data WareHouse • 集計・解析 • 多くはバッチ・非同期 • 多数の行のうち 多数の行の少数のカラムに注目 • 比較的均一にアクセスされる
  5. MySQL の得意分野 10 OLTP系 ワークロード OLTP系 ワークロード DWH系 ワークロード DWH系

    ワークロード テーブル テーブル • Online Transaction Processing • オンライン処理 • 結果をすぐ返す • 多数の行のうち 少数の行の複数のカラムに注目 • よくアクセスされる行と そうでない行がある • Data WareHouse • 集計・解析 • 多くはバッチ・非同期 • 多数の行のうち 多数の行の少数のカラムに注目 • 比較的均一にアクセスされる
  6. DBMSの使い分け • DB選定フェーズを確保する • 「違うもの」と比較する • × MySQL vs MySQL

    forks • ◦ MySQL vs Hadoop • ◦ MySQL vs Cassandra • ◦ OSS vs 商用 • × どのDBが一番良いか • ◦ どう組み合わせるのが良いか 11
  7. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 12
  8. Use InnoDB, No more MyISAM • MyISAM は トランザクション非対応 •

    BEGIN/COMMITが使えない・・・だけではない 13
  9. Use InnoDB, No more MyISAM • MyISAM は ディスクに同期書き込みしない •

    障害時にデータがロストするリスクがある • 破損チェックや復旧に時間がかかる 14
  10. Use InnoDB, No more MyISAM • MyISAM フェードアウトは確定的 • MySQL

    8.0 • Dictionary Data in InnoDB • DDL が crash safe に • https://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html 15
  11. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 16
  12. そしてテスト • 障害試験 • 負荷試験 • RDBはスケールできない(他と比較して • 近年、軽視されがち •

    ビジネスの加速 • CI/CD 等によるチェックポイントのない運用 • クラウドによるスケールアップ 19
  13. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 20
  14. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 24
  15. クエリとクエリの間に処理をはさまない 25 Connect Connect Execute SQL Execute SQL Call WebAPI

    Call WebAPI Execute SQL Execute SQL Disconnect Disconnect Connect Connect Execute SQL Execute SQL Call WebAPI Call WebAPI Execute SQL Execute SQL Disconnect Disconnect APIが遅くなると・・・ TIME
  16. クエリとクエリの間に処理をはさまない • Idle コネクションはそのうち wait_timeoutで切られる • SQL 実行時には接続が失われている 27 Connect

    Connect Execute SQL Execute SQL Call WebAPI Call WebAPI Execute SQL Execute SQL Disconnect Disconnect MySQL server has gone away MySQL server has gone away
  17. My MySQL Best Practice • DBを選ぶ • Use InnoDB 、no

    more MyISAM • エラーハンドリング • 定期的な再接続 • クエリとクエリの間に重い処理を入れない • DBAとのコミュニケーションのコツ 29