MySQL:OracleからMySQLへの移行1


【1】「インスタンスの違い」を理解して、正しく設定する

■ポイント
・innodb_buffer_pool_sizeやinnodb_log_buffer_sizeなどのパラメータは、DBA自身が指定する
・特に、innodb_buffer_pool_sizeのパラメータはパフォーマンスに大きく影響する
・innodb_buffer_pool_sizeは「サーバに搭載される物理メモリ量の70~80%程度」の値を設定する

【2】「ユーザーの違い」を理解して、正しく設定する

■ポイント
・MySQLの「ユーザー」は、「アクセス制御のみ」を行う役割を持つ
・内部的には、「ap_user@192.168.0.1」のように、「ユーザー名と接続元の組み合わせ」を1つのユーザーアカウントとして解釈する
・MySQLには「プロファイル」の概念がない。ユーザーアカウントごとのリソース制御はできないが、「パスワードポリシー」は個別に指定できる

【3】「権限」「ロール」の違いを理解し、正しく設定する

■ポイント
・MySQLは、ユーザー権限の種類がOracle Databaseより少ない
・権限の付与は、Oracle Databaseと同じく「GRANT」文で行える
・MySQLにはロールがないため、ユーザーアカウントごとに権限を付与する

【4】「表領域管理の違い」を理解し、正しく設定する

■ポイント
・Oracle DatabaseとMySQLでは、(一部を除き)物理ファイルの構成/名称に違いがある
・可能ならば、ディスク負荷や障害時を想定して「データファイル」「一時ファイル」「REDOログファイル」「UNDOファイル」を分散させる設計をしておく
・「ib_logfile(REDOログファイル)」はコミットごとにアクセスがあり、I/O負荷が上昇する原因になるため、別ディスクに保管するよう設定することで書き込み負荷を分散できる

【5】「監査の違い」を理解して、正しく設定する

■ポイント
・全てのクエリをログに出力する「一般クエリログ」を利用するならば、Linuxの「logrotate」などでログローテーションの仕組みを構築しておく
・普段使われるクエリ以外の実行をブロックするには、ホワイトリスト形式の「MySQL Enterprise Firewall」を使う
・ホワイトリストを自動的に作成する「自動学習モード」がある
・未許可のクエリが検知されたら「拒否」か「許可するが、監査ログに記録する」かを選べる

【6】「ロック/トランザクション分離レベルの違い」を理解して、正しく設定する

■ポイント
・MySQLにはトランザクション分離レベルが4段階ある(「SERIALIZABLE」「REPEATABLE-READ」「READ-COMMITTED」「READ-UNCOMMITTED」)
・デフォルト設定REPEATABLE-READだが、「READ-COMMITTED」に修正することを推奨する
・その理由は、「ネクストキーロック」によってパフォーマンス劣化を招く可能性があるため
・ネクストキーロックは、「READ-COMMITTED」への設定変更で回避できる

【7】「オプティマイザの違い」を理解して、正しく設定する

■MySQLにおけるSQL改善のアプローチ
・スロークエリログなどから、問題になっているクエリを特定
・EXPLAINで実行計画を確認し、想定通りのインデックスを使用しているかどうかを確認
・インデックスの追加、クエリに対してHINT句でチューニングする

■ポイント
・MySQLのオプティマイザは「コストベース」のみ
・MySQL 5.7で大幅なオプティマイザのリファクタリングが行われたため、「MySQL 5.7」以降を推奨する
・実行計画を確認するには、MySQL Workbenchにある「ビジュアルEXPLAIN」を使うと便利


[Database][Oracle][MySQL]
https://www.atmarkit.co.jp/ait/articles/1612/01/news009.html

0 件のコメント:

その他の記事