タグ

MySQLに関するakaneharaのブックマーク (31)

  • DBIでbindした後のSQL文を引っ張り出す方法 - download_takeshi’s diary

    会社で隣の席にすわってるKさんから「DBIでexecuteする時に色々な値をbindするじゃないですか。その後で実際に投げられたSQL文を引っ張ってくる方法ないんですか?」と質問されちゃいました。 そう言えばDBIx::Classとかだと環境変数でなんかセットするんだったけど、素のDBIの場合どうするのかな?と思って調べてみました。 DBIの長い長いドキュメントをずーっと読み進んで行くと、下の方に「TRACING」というセクションがありまして、そこにヒントが隠されてました。 どうやらTrace Flagsで「SQL」と指定すると標準エラーにトレース情報が出力されるみたいです。 具体的にはこれでいいみたい。 $dbh->{TraceLevel} = "3|SQL"; これでSTDERRにバコバコっとトレース情報が出力されて行きます。 STDERRの中に、実際に投げられたSQL文も含まれている

    DBIでbindした後のSQL文を引っ張り出す方法 - download_takeshi’s diary
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.1.7 範囲外およびオーバーフローの処理

    厳密な SQL モードが有効な場合、SQL 標準に従って、MySQL は範囲外の値を拒否してエラーを表示し、挿入は失敗します。 制限モードが有効になっていない場合、MySQL はカラムのデータ型範囲の適切なエンドポイントに値をクリップし、かわりに結果の値を格納します。 範囲外の値が整数カラムに割り当てられると、MySQL は、カラムデータ型の範囲の対応する終点を表す値を格納します。 浮動小数点または固定小数点カラムに、指定された (またはデフォルトの) 精度とスケールによって暗示された範囲を超えた値が割り当てられると、MySQL はその範囲の対応する終点を表す値を格納します。 テーブル t1 に次の定義があるとします。 CREATE TABLE t1 (i1 TINYINT, i2 TINYINT UNSIGNED); 厳密な SQL モードを有効にすると、範囲外エラーが発生します: my

    akanehara
    akanehara 2018/04/20
    [オーバーフロー]
  • MySQLのクエリの良し悪しはrows_examinedで判断する - かみぽわーる

    仕事やらなんやらでMySQLのクエリの良し悪しを判断する必要があるとき、EXPLAINの内容だけだとどのぐらい良くなったり悪くなったのか分からないので SET long_query_time = 0; してrows_examined (そのクエリでrows_sent行の結果を返すために何行に触ったのか)も一緒に提示するようにしている(少なくともMySQL 5.7時点ではrows_examinedはslow_query_logでしか確認できないはずperformance_schemaが有効ならevents_statements_historyやその仲間たちで確認できるとのこと*1 MySQL :: MySQL 5.6 リファレンスマニュアル :: 22.9.6 パフォーマンススキーマステートメントイベントテーブル)。 例: 上の例のBeforeは、もともとDBAが書いた温かみのあるSQLでO

    MySQLのクエリの良し悪しはrows_examinedで判断する - かみぽわーる
  • RDBMSのインデックスサイズを無難に見積もる方法 - まだ中学生のブログ

    RDMSを使うからには大量のデータを扱うことが多いです。 しかし、システムを運用していく上で、漠然と多いだけでなく、何MBなのか何GBなのか、増加率はどれくらいなのか、を見積もることが大切です。 RDMSのテーブルには型を定義します。 型にはそれぞれサイズがあるので、計算は可能です。 INT型なら4byte、DATETIME型なら8byteといった値です。 しかし、VARCHARやTEXT型といった可変長カラムならまだしも、インデックスのサイズを見積もるのはなかなか困難です。 INT型のカラムにインデックスを張ればサイズは2byte!とか決まっていれば計算できるのですが、そうでもないのです。 一応計算式は存在していますが、あくまで見積もりの式で、最大でこれくらいになる、という値しか求まりません。 実際私も業務でDBのサイズの見積が必要になって困ったので、インフラのDBチームの人、いわゆるD

    RDBMSのインデックスサイズを無難に見積もる方法 - まだ中学生のブログ
  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.4.5 スロークエリーログ

    スロークエリーログは、実行に long_query_time 秒を超える時間がかかり、少なくとも min_examined_row_limit 行を検査する必要がある SQL ステートメントで構成されます。 スロークエリーログは、実行に長い時間がかかっているため最適化の候補となるクエリーを見つけるために使用できます。 ただし、長いスロークエリーログの調査には時間がかかる場合があります。 これを簡単にするために、mysqldumpslow コマンドを使用してスロークエリーログファイルを処理し、その内容を要約できます。 セクション4.6.9「mysqldumpslow — スロークエリーログファイルの要約」を参照してください。 初期ロックを取得する時間は実行時間として計算されません。mysqld がスロークエリーログにステートメントを書き込むのは、ステートメントが実行されて、すべてのロックが解

  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • MySQLを1〜2時間でスケールアウトする - クックパッド開発者ブログ

    最近、Elastic BeanstalkやECSと戦っているSREチームの菅原です。 P5をやりたいのにPS3もPS4も持っていないので指をくわえて羨ましがっている毎日です。 この記事では、突然のアクセス増に備えるために、MySQLのスレーブを1〜2時間でスケールアウトできるようにした話を書きます。 MySQL on EC2 クックパッドは周知の通りAWSを利用していますが、主要なデーターベースについてはAmazon RDSではなくMySQL on EC2を使っています。 これは以下のような理由によるものです。 歴史的な経緯: AWS移行当時、RDSが無かった。また、移行後もしばらくはTritonnを使っていたため、RDSを使うことができなかった オンラインメンテナンスの実現: VPCルートテーブルを使った仮想IPとMHA for MySQLを使ってダウンタイムゼロのマスタDBの切り替えを

    MySQLを1〜2時間でスケールアウトする - クックパッド開発者ブログ
  • MySQLインデックスのお手入れの基本 | Yakst

    Percona Database Performance Blogの翻訳。既に運用を始めたデータベースで、インデックスが正しく使われているか、無駄や不足がないかを確認する方法のまとめ記事。クエリをひとつひとつ確認するのではなく、統計情報を元に判断する分かりやすい方法。 このブログ記事では、MySQLインデックスに手入れする基的なステップについて見ていこうと思います。 データベースは、インデックス次第でハイパフォーマンスにも、役立たずで遅くて大変にもなりうることはご存知でしょう。インデックスは、時々手入れをする価値がある非常に重要なものです。それでは、何をチェックすればよいのでしょうか?順不同ですが、確認すべき点を挙げてみます。 1. 使われていないインデックス sysスキーマで、使われていないインデックスをとても簡単に見つけられます。 schema_unused_indexes ビューを

    MySQLインデックスのお手入れの基本 | Yakst
  • MYSQLのレプリケーション不整合を解決 - Qiita

    Slave_IO_Running: と Slave_SQL_Running: が両方とも YES になっていると、スレーブは問題なく動作していることになる。 しかしSlave_IO_RunningのみがNOになっている。どうしよう困った。 手順としてはレプリケーション側の情報をマスターの情報に全て書き変えてしまってSTART SLAVE;を行う。 まず最初にマスター側で

    MYSQLのレプリケーション不整合を解決 - Qiita
  • Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT

    平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識

    Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT
  • ヤフー社内でやってるMySQLチューニングセミナー大公開

    20140711 MySQL Casual Talks vol.6 / 続・Amazon RDS Casual TalksMori Tetsuya

    ヤフー社内でやってるMySQLチューニングセミナー大公開
    akanehara
    akanehara 2016/02/23
  • MySQLでtoo many connectionsエラーが発生した際の対処方法 | クランチタイマー株式会社

    こんにちは。エンジニアの宮です。 先日アプリ開発をしていると「too many connections」というエラーが発生し、MySQLにアクセスできなくなりました。 「too many connections」、つまり接続数が多いという理由のため、MySQLの設定を変更し接続数(max_connections)を増やす、1回の接続時間(wait_timeout)を短くするなどの対策をとれば解決します。 その方法は、SSHでサーバへログインし「/etc/my.cnf」を編集することによって可能です。 しかし、クランチタイマーではアプリ開発・運用環境としてAWSAmazon Web Service)を使っており、データベースサーバーはRDSを使用しているため、ターミナルを使用してSSHで直接ログインし、「/etc/my.cnf」を直接編集することができませんでした。 どうすればよいかと調

    MySQLでtoo many connectionsエラーが発生した際の対処方法 | クランチタイマー株式会社
  • MySQLにおけるレプリケーション遅延の傾向と対策

    レプリケーションはMySQLで最もよく使われる機能のひとつだ。レプリケーションは基的に非同期でデータの複製を行う仕組みになっているのだが、非同期故にどうしても逃れられない問題がある。そのひとつが今回のテーマ、遅延である。というと、MySQLのレプリケーションはすぐに遅延が生じてしまうように感じてしまうかも知れないが、そのようなことはない。ほとんどの場合は即座にスレーブの更新が行われる。 なぜ遅延は発生するのか、どのように遅延が起きていることを調べるのか、どのように回避するのかということをエントリでは解説したい。うまく遅延と付き合って、MySQLのレプリケーションをより快適に運用してもらえればと思う。 そもそも遅延とは何かMySQLのレプリケーションは非同期で行われる。これは準同期でも同じであり、スレーブにおいて更新が起きるのはマスターよりも一瞬遅れてしまう。これは非同期であるが故に逃れ

    MySQLにおけるレプリケーション遅延の傾向と対策
  • レプリケーションが追いつかないときに試すこと - Hatak::Techlog

    MySQL Casual Advent Calendar 2011” 7 日目を担当させていただく、hatak (@hisashi) です。 普段はモバイルゲームのインフラをメインにみているのですが、今回はそんな業務で経験したことを基に記事を書かせていただきます。 カジュアルすぎる内容かもしれませんが、お付き合いいただければと思います。 MySQL のレプリケーション MySQL のレプリケーションは、安定稼働やバックアップ、負荷分散などの目的に利用できる優れた機能です。 bin-log (バイナリログ) を利用して Master サーバから Slave サーバに更新を伝播させ、データの複製を行います。Slave サーバでは、2 つのスレッドが動作しています。 IO_THREAD – Master から送られてきたデータを受け取り、relay-log (リレーログ) として書き出す SQ

  • cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社

    MySQLのロック機能を使って楽に cronジョブの多重実行回避をしようという話 たかがロック、されどロック システムで非同期にキューの処理などを行う場合、cronを使って短い間隔でバッチジョブを起動してキューを処理するという方法がよく取られるが、キューの混み具合によってはバッチジョブにかかる時間が長くなってしまうため、前に実行されたジョブがまだ走っているかどうかチェックして、もし走っている場合は処理を実行せずにそのまま終了するといった制御が必要になる。 たまにこの制御をしていないバッチジョブが溜まりに溜まってシステムをハングさせているのを見かける。 適当な空のファイルを作成してこれを flockするとか、システムコールレベルでアトミックに作成できることになっているオブジェクト(シンボリックリンクなど)を駆使してロックの代わりにするとかといったテクニックが典型的に利用されるが、これらを真面

    cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社
  • カーディナリティについてまとめてみた - Qiita

    カーディナリティとは テーブルにカラムがあるとして、カラムに格納されているデータの種類がどのくらいあるのか(カラムの値の種類の絶対値)を、カーディナリティという。 具体例 カーディナリティが低い場合 例えば性別なら、男と女の二種類である。 カラムのデータの種類が、テーブルのレコード数に比べて二種類と少ない。このことを カーディナリティが低い という。 カーディナリティが高い場合 一方顧客番号ならたくさんの種類(番号)が存在することになる。 カラムのデータの種類が、テーブルのレコード数に比べて多い場合、 カーディナリティが高い という。 カーディナリティを踏まえたインデックスの張り方 基的に、 カーディナリティの高い列に作成する 必要がある。 はじめに、カーディナリティは カラムの値の種類の絶対値と書いたが、先程の例で言うと性別のカーディナリティは2になる。他にも例えば1年間の日付なら1〜

    カーディナリティについてまとめてみた - Qiita
  • 【MySQL】カンマ区切りのIDのリストを、マスタテーブルで定義されている日本語名にフォーマットして出力する不思議なSQL | バシャログ。

    【MySQL】カンマ区切りのIDのリストを、マスタテーブルで定義されている日本語名にフォーマットして出力する不思議なSQL | バシャログ。
  • MySQL :: MySQL 5.1 リファレンスマニュアル :: 14.15 MySQL Cluster の用語

    以下の用語は MySQL Cluster の理解あるいは MySQL Cluster に関する特別な意味を持ちます。 クラスタ: 一般的な意味は、クラスタはユニットで動作する一連のコンピュータで 1 つのタスクを実行するために一緒に作業します。 NDB Cluster: これは MySQL のストレージ エンジンでいくつかのコンピュータを束ねてデータ ストレージ、検索、および管理を行うためのものです。 MySQL Cluster: これは NDB ストレージ エンジンを使用した一群のコンピュータが一緒に作業して、in-memory storage を使用して アーキテクチャを共有しない構成で分散型 MySQL データベースをサポートすることを意味します。 設定ファイル: テキスト ファイルで命令およびクラスタ、そのホスト、およびそのノードに関する情報を含んでいます。これらはクラスタが起動し

  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
  • エラーログドリブン ソースコードリーディング(ただしMySQLに限る) | GMOメディア エンジニアブログ

    こんにちは、DBAです。 MySQLのソースコードを読んでみたい、だけどどこから始めればいいのかわからない…というお客様はいらっしゃらないでしょうか。そんな2年前の俺に贈るエントリーです。 まずはソースコードのタグジャンプが出来る何かを用意しておいた方が捗ります。俺はvim + GNU Globalでやっていますが、その前はgrep -irやfind . -exec grepでもなんとかなっていたので、なくても遅いだけでなんとかなるにはなります。 ⇒ 人間とウェブの未来 - GNU GLOBALとvimで巨大なコードでも快適にコードリーディング さて、たとえばこんなエラーログが吐かれることがあるじゃないですか。 141203 18:14:02 [Note] Stop asynchronous binlog_dump to slave (server_id: xxxx) スレーブのI/Oスレ