2023年3月6日のブックマーク (2件)

  • MySQLでインデックスを作成する手順と注意点 - Qiita

    いつインデックスを作成するか? MySQL5.6以上であれば、インデックス作成中に該当テーブルに対するSELECTやUPDATEが可能です。 しかし、MySQLにはメタロックという仕組みがあるため、メタロックが取得できない時間帯には インデックスを作成してはいけません。 結果として、該当テーブルへのアクセスが少ない時間帯に実施する必要があります。 ※数千万件程度のレコード数のテーブルになってくると30分以上かかったりします。 メタロックのまとめ ポイントだけ記載します - ALTER TABLE文の開始時にメタロックを取得する。 - メタロックが取得できない場合、「Waiting for table metadata lock」となり、待ちになる。 - 「Waiting for table metadata lock」の間、該当テーブルへのアクセスがすべて待ちになるため、システム障害につな

    MySQLでインデックスを作成する手順と注意点 - Qiita
    letitride
    letitride 2023/03/06
  • 第180回 MySQLのメタデータロックについて | gihyo.jp

    頻繁にアクセスされるテーブルでこの問題が起こると、サービスからのすべてのセッションが待機され、サービス障害につながる可能性があります。そのため、MySQLではトランザクションは極力小さく保つことと、commitやrollback漏れによる終了することのないトランザクションを防がなければいけません。 もし、この問題が起こってしまった際に解消するには以下の方法になります。 session1のトランザクションが正常終了するまで待つ session1をkillステートメントで強制終了させる session2のDDLをキャンセルする、またはタイムアウトされるまで待つ(lock_wait_timeoutパラメータ) 1.については、たまたまロングトランザクションが実行されているのであれば、このトランザクションが正常終了するまで待ってから、DDLを実行します。 2.については、正常終了する見込みのない予

    第180回 MySQLのメタデータロックについて | gihyo.jp
    letitride
    letitride 2023/03/06