タグ

MySQLに関するtito1201のブックマーク (22)

  • PHP の mysqli, mysqlnd, pdo_mysql, PDO, libmysqlclient まとめ - Qiita

    PHPmysqli, mysqlnd, pdo_mysql, PDO, libmysqlclient まとめPHPMySQL PHPMySQL を利用する時、通常は PHP 拡張モジュール(extension)を用いて接続します。 その時、 mysqli, mysql, mysqlnd, pdo_mysql, PDO, libmysqlclient といったわかりづらい名前の諸々があるので、ここでまとめておきます。 拡張モジュール こんな感じで設定を書くことで、ネイティブ C で記述された機能を PHP 上で利用出来るようになります。 PHP の実装よりも高速に動作するため、 MySQL との通信処理など処理速度がボトルネックになるようなものは拡張モジュールとして実装することで、処理速度の向上をしています。 拡張モジュール用ライブラリ まず、 MySQL 拡張モジュールを実装す

    PHP の mysqli, mysqlnd, pdo_mysql, PDO, libmysqlclient まとめ - Qiita
  • MySQL8.0で低速になったSELECT COUNTを高速化する - CyberAgent SRG #ca_srg

    メディア統括部 サービスリライアビリティグループ(SRG)の鬼海雄太(@fat47)です。 #SRG(Service Reliability Group)は、主に弊社メディアサービスのインフラ周りを横断的にサポートしており、既存サービスの改善や新規立ち上げ、OSS貢献などを行っているグループです。 記事では、MyS

    MySQL8.0で低速になったSELECT COUNTを高速化する - CyberAgent SRG #ca_srg
  • MySQLで照合順序を確認する方法。 - Javaと情熱のあいだ

    テーブル SHOW TABLE STATUS FROM [DB_NAME]; カラム SHOW FULL COLUMNS FROM [TABLE_NAME];実行するとCollationにて照合順序が確認できます。

    MySQLで照合順序を確認する方法。 - Javaと情熱のあいだ
  • InnoDB のロック機構について

    n 番煎じネタですが、一度やってみたかったので手元で検証してみました。 特段新しいものは無いと思いますが、インテンションロックと各種ロックタイプを網羅的に挙動検証する記事は自分の観測範囲にはなかったはず? 図を用意できたら読みやすかったと思うのですが、怠慢したので innodb_status_output_locks の出力でご容赦ください データセット今回使うデータセットです mysql> show global variables like ‘version’; + — — — — — — — -+ — — — — + | Variable_name | Value | + — — — — — — — -+ — — — — + | version | 5.7.26 | + — — — — — — — -+ — — — — + 1 row in set (0.00 sec)mysql>

    InnoDB のロック機構について
  • 【MySQL】SHOW ENGINE INNODB STATUSの見方を学ぶ - 地方エンジニアの学習日記

    SHOW ENGINE INNODB STATUSの見方が全然わからなかったので読み方を調べていく mysql> SHOW ENGINE INNODB STATUS\G; BACKGROUND THREAD ----------------- BACKGROUND THREAD ----------------- srv_master_thread loops: 0 srv_active, 0 srv_shutdown, 4973 srv_idle srv_master_thread log flush and writes: 4970 InnoDBには、サーバーの状態に応じて1秒に1回バックグラウンドタスクを実行するマスタースレッドがありメインのバックグラウンドスレッドによって実行された作業を表示している。active値が大きいほど、システムはビジーとなる。 SEMAPHORES mut

    【MySQL】SHOW ENGINE INNODB STATUSの見方を学ぶ - 地方エンジニアの学習日記
  • MySQL5.7と8.0における文字コード/照合順序の設定方法 - 雑記帳

    前置き ・パラメータ名がハイフン表記か、アンダースコア表記か常に意識しておく必要有 ・初めてMySQLを起動する前に設定すべき 後でも直せなくはないが、苦行 また、mysql/performance/sysスキーマをalter文で変更するの怖い(一部放置している…) 前提 ・MySQL5.7/8.0におけるmy.cnf(Linux)/パラメータグループ(AmazonRDS)での設定を考慮 ・文字コードはutf8mb4、照合順序はutf8mb4_general_ciに設定 ・データベースのことをスキーマ、MySQLサーバーのプロセス全体をサーバーと記述する 文字コード 1.文字コードとは ・みんな大好き文字コードのため割愛 ・MySQL5.7も8.0もutf8mb4が無難 (cp932で保管しないといけないシステムもあるであろうが…) 2.文字コードに関するパラメータ 2.1.charact

    MySQL5.7と8.0における文字コード/照合順序の設定方法 - 雑記帳
  • 【MySQL】実行計画は3つに分けて読む

    これはなに どうも、レバテック開発部のもりたです。 今回はSQLチューニングをする上で欠かせない実行計画の読み方についてまとめます。この手の情報、インターネットに無限に資料あるんですが、全ての項目を上から読んでいくとマジで目が滑ってなにも頭に入ってこないので、それぞれの関係性がわかりやすい形で整理します。また、公式ドキュメントには言葉足らずな箇所もあるため、そちらも補足しています。 なお、対象とするRDBMSMySQLです。また、インデックスの解説や実際のチューニングのコツ等は扱っていません。 実行計画の取得方法 いちおう記載しておきますが、実行計画の取得方法は以下の通りです。 -- 実行計画を見たいクエリの前にEXPLAINと書くだけ EXPLAIN SELECT ...(略)... ; -- 結果 -- こんな感じで出る。表示のされ方は使っているクライアントアプリ次第 /* # id

    【MySQL】実行計画は3つに分けて読む
  • MySQL 8.4 LTS登場!!

    記事を書くのが遅くなってしまったが、先日MySQL 8.4シリーズが登場したので紹介をしておこうと思う。新機能の解説については機会を改めて書くとして、今回は主にアップグレードにまつわる重要なポイントを書き記しておく。 LTS = Long Term Support 以前の記事でも紹介した通り、MySQL 8.4はLTS = Long Term Supportのバージョンとなっている。長期間サポートするために互換性を最大限保証するバージョンである。前のメジャーバージョンであるMySQL 8.0シリーズのように、シリーズの途中で互換性が破壊されるような変更が入ることは基的に無い。「バグ修正のためにどうしても仕様を変えなければならない」というような事態が生じる可能性はゼロではない。なので絶対に互換性が保たれるとは言い切れないところであるが、基的には仕様変更はない方向で今後リリースされていくこ

    MySQL 8.4 LTS登場!!
  • MySQL5.6のオンラインDDLでメタデータロックがかかった話 - R-Hack(楽天グループ株式会社)

    こんにちは、ラクマの宮崎です。 MySQLのオンラインDDLを実行する際にメタデータロックがかかってしまい困ったので、オンラインDDLとメタデータロックについて調べて手元で試したことをまとめました。 MySQLのバージョンは 5.6、ストレージエンジンは InnoDB です。 この記事の多くは、MySQL 公式ドキュメントの以下のページを参考に書いています。 公式ドキュメント①:14.11.1 オンライン DDL の概要 公式ドキュメント②:14.11.2 オンライン DDL でのパフォーマンスと並列性に関する考慮事項 DDLとは オンラインDDLとは オンラインDDLに対応しているDDL Ruby on RailsのMigrationでオプションをつける方法 オンラインDDLの注意点とWaiting for table metadata lock が発生するケース Waiting for

    MySQL5.6のオンラインDDLでメタデータロックがかかった話 - R-Hack(楽天グループ株式会社)
  • 【MySQL】読み取り専用トランザクションもmetadata lockを取る - 地方エンジニアの学習日記

    dev.mysql.com BEGINなどをせずにSELECTを実行しただけでも読み取り専用トランザクションというのが開始されるらしい。スロークエリが実行されているテーブルに対してDDLを実行するとmetadata lockが取られて以降のDMLが全てブロックされる問題があるがBEGINとかしてない場合は問題ないのでは?と思ったので調べてみた。 TrxA > SELECT SLEEP(3600) from HOGE; とやってHOGEに対してDDLを発行すると3600sの間DDLは待たされ以降のDMLを全て待たされる。読み取り専用トランザクション中にALTERが実行されるとトランザクションの分離を実現できなくなるので考えてみればそれはそうという感じである。 実験してみる こんなテーブルにALTER TABLEを実行してみる mysql> desc test_table; +--------

    【MySQL】読み取り専用トランザクションもmetadata lockを取る - 地方エンジニアの学習日記
  • MySQL の Online DDL の挙動をローカルで検証して理解する

    MySQL の Online DDL について検証しつつ備忘録としてまとめておきます。 (記事の検証は、MySQL 5.7.40 で実施しています。) mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.40 | +-----------+ 1 row in set (0.02 sec) Online DDLとは MySQL 5.7 Reference Manual - 14.13 InnoDB and Online DDL Online DDL の機能によって、インデックスの作成などの DDL を実行している最中に INSERT , UPDATEなどの DML が実行できるようになっています。 MySQL 5.5 以前での ALTER TABLE は下記のような制限があったようです。 ALTE

    MySQL の Online DDL の挙動をローカルで検証して理解する
  • 第30回 InnoDBオンラインDDLについて | gihyo.jp

    LOCKとALGORITHM句を省略した操作は、先ほどのDDL操作のオンラインステータスのサマリーに基づき、以下の順序で評価され、使用可能なオプションで実行されます。 LOCKの場合 NONE → SHARED → EXCLUSIVEの順に評価されます。 ALGORITHM句の場合 INPLACE → COPYの順に評価されます。 ここで気をつけておきたいことは、たとえばカラムのデータ型を変更するなどのインプレース方式と並列DMLが許可されていない操作に対してオンラインDDLが有効だろうと思い込み、それらの句を省略して番環境に対して実行したためにサービスを停止させてしまうなど、痛い目にあうことがあります。 対策として、期待している動作のALGORITHM=INPLACEとLOCK=NONEを記述するとエラーとなり実行されません。オンラインDDLが有効かどうか不安な場合は、明示的にLOCK

    第30回 InnoDBオンラインDDLについて | gihyo.jp
  • 第180回 MySQLのメタデータロックについて | gihyo.jp

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

    第180回 MySQLのメタデータロックについて | gihyo.jp
  • MySQL勉強会〜ロックについて(DDL編)〜を開催しました! - ANDPAD Tech Blog

    こんにちは。最近リモートワーク用にマイクを買ったソフトウェアエンジニアの福間(fkmy)です。 先月、ANDPADのデータベースの技術顧問をして頂いてる三谷(mita2)さんによるロックの基礎編)〜について勉強会を開催しました。今月はロックのDDL編について8/4(月)に勉強会を実施しました。重要な箇所をピックアップします! また今回も在宅勤務期間中のためオンライン開催となり当日は16名が参加していました。 内容 当日の資料はこちらになります。 DDLについて DDLとはData Definition Languageの略称でデータ構造を定義するための言語のことです。SQLではCREATE文、DROP文、ALTER文、TRUNCATE文が該当します。 DDLの仕組みと改善の歩みについて MySQLのALTER TABLEの初期実装 新しいテーブル定義のテーブルにデータコピーする 実行中は書

    MySQL勉強会〜ロックについて(DDL編)〜を開催しました! - ANDPAD Tech Blog
  • MySQLのインデックスの貼っていいとき悪いときを原理から理解したいよ😭

    今回答えを出したい問いはこちら!! インデックスはどのような仕組みを以て、何を実現したいものなのか それを踏まえたとき、インデックスはどういう場合になぜ貼る方が良いのか。また、どういう場合になぜ貼らない方が良いのか 大体分かっているよって人はサヨナラって感じのおさらい記事だぜ!!!!それじゃいってみよー🎉 あと、おれは今回MySQLにしぼっていくぜ👶 ってわけでOracleとかに興味があるやつは引き返しな! indexの概要 公式の見解としては「where句を使ったselectクエリの実行速度を向上させるために実装されている、各行へのポインターのような振る舞いをする仕組み」って感じ👶 The best way to improve the performance of SELECT operations is to create indexes on one or more of t

    MySQLのインデックスの貼っていいとき悪いときを原理から理解したいよ😭
  • オンライン DDL を期待して ALTER 文を実行したら障害になりかけた話 - カミナシ エンジニアブログ

    こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシではマルチプロダクト化に向けて、認証・認可の切り出しを進めています。その対応を進める中で、既存テーブルへのカラム追加が必要になりました。 先日、そのリリースのために番データベースにマイグレーションの ALTER 文を実行したところ、クエリが詰まって危うく障害になるところでした(幸いすぐにキャンセルして事なきを得ました)。 原因を調べたところ、オンライン DDL は複数の条件が関係することがわかりました。オンライン DDL に対する知識不足と事前検証の甘さゆえのミスでしたが、結果的には良い学びが得られました。 カミナシのバリューのひとつである「全開オープン」の気持ちで、事の顛末やそこから得た学びを公開します。 なお、今回の話は MySQL 5.7 互換の Amazon Aurora MySQL 2 で確

    オンライン DDL を期待して ALTER 文を実行したら障害になりかけた話 - カミナシ エンジニアブログ
  • Aurora MySQLをMySQL8.0へ移行した話 - inSmartBank

    こんにちは!SREを担当してます上平と申します。 このエントリーではAurora MySQL5.7互換からMySQL8.0互換への移行を実施した際の流れや学びに関して紹介したいと思います! B/43 では Aurora MySQL5.7系をサービスリリースから使っており、Aurora MySQL バージョン2のサポート終了日(2024/10/31)が近づいているのもあったので、移行することにしました。 Amazon Aurora バージョン - Amazon Aurora これからAurora MySQL8.0へ移行を検討されている方の参考になれば幸いです。 想定される読者 Aurora MySQL 5.7系を使っていて、アップグレードを検討している方 実際の Aurora MySQL 8.0 への移行手順を知りたい方 AWS インフラに興味がある方 前提 Aurora MySQL5.7互

    Aurora MySQLをMySQL8.0へ移行した話 - inSmartBank
  • MySQLパフォーマンスチューニングTIPS

    2019年7月10日に開催された「WEBエンジニア MeetUp@札幌 #6 MySQL Special」での発表資料です。 発表時の資料に少し説明を加筆・修正してから公開しています。 ※追加で以下の更新をしました。(2019年7月19日) - MTSを効率化するための設定に関して、WRITESET方式による並列化の説明を追記(13~16ページを追記)

    MySQLパフォーマンスチューニングTIPS
  • MySQLの準同期レプリケーションに関する質問への回答と詳細 | Yakst

    MySQLの準同期・ロスレス準同期レプリケーションの仕組みを解説し、同機能についてのよくある誤解やメリットについて説明します。 最近、メールで「MySQL Lossless Semi-Synchronous Replication」について質問されることがありました。この質問への答えは多くの人にとって有益であると考えたため、回答をこのブログ記事に書きたいと思います。回答を読めば、トランザクションのコミット、準同期レプリケーション、MySQLのクラッシュリカバリ、ストレージエンジン(InnoDB)クラッシュリカバリの内部挙動について理解できるでしょう。同時に、私がこれまで見聞きしてきたいくつかの誤解についても糾したいと思います。まずはそれら誤解の一つから始めましょう。 こうした誤解の一つは以下のようなものです(これは正解ではありません):準同期レプリケーションが有効になっているスレーブは常に

  • MySQLがメモリー不足の時に何をするか : トラブルシューティングガイド | Yakst

    MySQLがメモリー不足で停止してしまった(OOM Killerに停止させられた)時に確認すべき項目を紹介する。特に、MySQLのバグでメモリリークが起きている可能性がある場合に手がかりを得る方法について。 [MySQL]原文 What To Do When MySQL Runs Out of Memory: Troubleshooting Guide - Percona Database Performance Blog (English) 原文著者 Alexander Rubin 原文公開日 2018-06-28 翻訳依頼者 翻訳者 doublemarket 翻訳レビュアー kakuka4430 原著者への翻訳報告 1948日前 原文へのコメントで報告済み 編集 クラッシュした時のトラブルシューティングが楽しいタスクであったためしはありませんが、クラッシュの原因をMySQLが教えてくれ