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

MySQL_のお話.pdf

Avatar for KangSangUn KangSangUn
October 07, 2019
1.3k

 MySQL_のお話.pdf

By.shiro16

Avatar for KangSangUn

KangSangUn

October 07, 2019
Tweet

Transcript

  1. データの操作とは • SELECT (検索) ◦ 条件は基本的な WHERE ちょっと難しい HAVING など様々

    • INSERT (追加) ◦ 1 クエリで 1 件の追加から n 件の追加まで • UPDATE (更新) ◦ 1 クエリで 1 件の更新から n 件の更新まで • DELETE (削除) ◦ 1 クエリで 1 件の削除から n 件の削除まで
  2. トランザクションとは • トランザクション開始時に save(BEGIN) する • n 個全ての処理が成功した際は上書き save(COMMIT) する

    • 1 つでも失敗した場合開始からの変更を無かったことにするため最初の save を load(ROLLBACK) する • ※あくまで変更を行なったデータのみ load するので他の処理で変更されたデー タに影響はない
  3. アクセス権の管理 • GRANT 構文を使って行う • 権限が付与できる範囲は様々 ◦ SELECT/UPDATE/INSERT/DELETE/CREATE などの単位で細かく設定 可能

    ◦ どんなユーザが存在するか?は “SELECT * FROM mysql.user\G” • GRANT 構文を実行したら FLUSH PRIVILEGES を忘れずに
  4. SHOW VARIABLES 構文について • MySQL の設定には GLOBAL/SESSION が存在する • “SHOW

    GLOBAL VARIABLES;” で GLOBAL の設定 • “SHOW VARIABLES;” で SESSION の設定 • GLOBAL/SESSION の違いは全体の設定か、現在接続しているセッ ションでのみ有効な設定か • ちょっと変更して試したい場合は SESSION を使うのが良い
  5. SHOW VARIABLES 構文について • “SHOW VARIABLES” を実行すると大量に設定項目が出てくる • “SHOW VARIABLES

    LIKE "%connection%";” などで絞り込みが可能 • max_connections は接続できる最大数 ◦ Rails の server を並べるなら max_connections をあげないと死 • 意味を調べておくと後々役に立つかも
  6. オススメの項目 • 先で述べた max_connections はとりあえず上げておいても良い ◦ Rails なら unicorn が立ち上がらないのでエラーにすぐに気づけるので最

    悪その時でも可 • 文字コード関連 ◦ 最低でも utf8 絵文字や特殊な文字が入ることがわかっているなら utf8mb4 ◦ 今時、新規で Shift_JIS/EUC-JP とか正気か?となる • InnoDB 周りの設定は一通り把握しておくのが良い ◦ “SHOW GLOBAL VARIABLES LIKE "%innodb%";” ◦ 今時、新規で MyISAM とか(ry
  7. 最適化が必要な理由 • クエリはレコード数などによって実行時間が変わってくる • 最初は 0.00 sec で取得できていたものがある時から 1.00 sec

    とか普通 ◦ (ユーザがアクセスするページでは) 1 sec は遅い • どうにかして早くしないといけない
  8. 最適化の方法 • INDEX というものを使う • 基本的には WHERE 句や ORDER BY

    句で指定されている column に INDEX を貼る ◦ 実際にはどのような INDEX が効果的か調べる必要がある ◦ 単独/複数の column にどのように INDEX を貼ると効果的か? • EXPLAIN を使って今の実行計画を調べることが可能 ◦ “EXPLAIN SELECT * FROM ….” と EXPLAIN の後に実行計画を確認し たいクエリを続ける • INDEX について語り始めると長くなるので詳細は割愛 ◦ INDEX に関してはこちらの記事がわかりやすい
  9. レプリケーションの概要 • MySQL server が 1 台のみだといずれ限界がくる ◦ 限界は server

    の cpu/memory による • server を n 台にすればいい(雑) • slave server を用意する ◦ 検索系のクエリは slave へ ◦ 更新系のクエリは master へ • リアルタイムでのデータの同期は binlog を使って行われる • 負荷分散の他にも master server がお亡くなりになった際に slave を master に昇格させることが可能(自動でも可)
  10. レプリケーションの概要 • master 1 台で稼働させることも可能 • 可用性という面では master-slave 構成が良い •

    slave = backup ではない ◦ 別でしっかり backup を取るの推奨 ◦ slave は 2 台以上が望ましい
  11. MySQL まとめ • MySQL 覚えることいっぱい • アクセス権を適切に設定してセキュアに • 各種パラメータはいざという時に役立つ •

    クエリチューニングが出来ると強みになる ◦ 意外にちゃんと出来る人は少ない ◦ shiro16 は今も 10 年前もクエリチューニングしてる • レプリケーションも仕組みを知っていると役立つはず • マネージドなもの(RDS等)は仕組みを知らなくてもポチポチで使えるが 仕組みを知っていると困った時に役に立つよ
  12. MySQL 本 • 実践ハイパフォーマンスMySQL ◦ MySQL の全てが書いてあるといっても過言ではない(かも) ◦ 少し古いが... ◦

    最初の会社の上司に server 3 台と本を渡されて「レプリケーション組んで みな」と言われたのはいい思い出 • SQLアンチパターン ◦ MySQL というよりはリレーショナルデータベースを使う際にシステムが気を つけることが書いてある