MySQLに関するGedowFatherのブックマーク (17)

  • AWS Aurora MySQL Parallel Query の基礎研究 | 外道父の匠

    AWS Aurora MySQLには、高性能を期待できる Parallel Query という機能があります。 実際、良いモノっぽいのですが、非常に情報が少ないので私めがいつものように掘り下げて、お役に立てればという徳を積む行為であります。 目次 Parallel Query とは リンク集 速度比較 費用の仕組み 設定による有効・無効 有効にできない条件 Parallel判定されるクエリ 結合クエリ innodb_buffer_pool_size との関係 その他 実践では Parallel Query とは 詳しくは下記リンクを見たほうがいいのですが、頑張って要約してみます。 通常のDB処理は、データを可能な限りメモリ上に置いておいて処理しようとしますが、オンメモリじゃないデータはストレージから取得する必要があり、データ取得後はDB体における1スレッドがクエリ処理を行います。 Aur

    AWS Aurora MySQL Parallel Query の基礎研究 | 外道父の匠
    GedowFather
    GedowFather 2021/10/22
    頑張ったので褒めて欲しいシリーズ書きました
  • PythonでMySQLのLockWaitクエリを採取 | 外道父の匠

    データベースには処理の一貫性を保つためのトランザクションという仕組みがあり、扱うデータ箇所がカチ合う場合に、後発のクエリが待機状態になることがあります。 その待機がどのくらい発生しているかは、DBのステータス値やメトリクスから判断できるのですが、ではどのようなクエリで発生しているかとなると、調べるのが面倒くさい。というところから発生したPythonスクリプトになります。 LockWaitを調べる理由 そもそも私の業界のWEBアプリケーションの場合、クエリがロック解除待ちを長時間することはほぼありません。スロークエリを撲滅させるのと同じで、1クエリに0.5秒以上とか必要としちゃうと、ユーザーへのレスポンスとしては容易に1秒以上になって、ユーザー離れの要因になるため許容できないからです。 しかし複数のサービスを観察していると、LockWaitの発生頻度が結構違ったりして、それはまぁアプリケーシ

    PythonでMySQLのLockWaitクエリを採取 | 外道父の匠
    GedowFather
    GedowFather 2021/09/17
    書きました
  • PythonでMySQLのスロークエリログを集計 | 外道父の匠

    久々に溜まったブログネタ放出をしようかなと、その前に下書きから掘り起こしてきた、いまさらなスロークエリ関連で準備運動です。 RDSのスロークエリ情報は当然、集計を自動化していつでも見れるようにしてあるのですが、ちょいと必要があったので、今回はあえて単発ログを集計する形に切り出したものを用意してみました。 スロークエリログの必要性 最近はNewRelicとかで、アプリケーションの処理を分別して処理時間などを集計するので、それで課題となるクエリを確認したりもします。 非常に便利な仕組みですが、アプリケーション外のジョブなどが実行したクエリは集計されないことや、負荷試験で課題を炙り出すときだとテスト環境にエージェントやライブラリを仕込む必要がある、といったデメリットとまでは言わないまでも面倒さがあります。 その点、スロークエリはサーバー側で記録するものなので、0.1秒とかでONにしておけば、対象

    PythonでMySQLのスロークエリログを集計 | 外道父の匠
    GedowFather
    GedowFather 2021/08/08
    書きました
  • RDSで接続数とメモリ消費量の調整事例 | 外道父の匠

    RDS Auroraを使っているところで、OSの空きメモリが少なくなったアラートが出たので、それについて細かく考察したら、それなりの量になったのでまとめた感じです。 別にAuroraじゃなくRDS MySQLでも、MySQL Serverでも同じ話なのですが、クラウドならではの側面もあるなということでタイトルはRDSにしております。 RDSのメトリクス監視 RDSはブラックボックスとはいえ、必要なメトリクスはだいたい揃っているので、CloudWatch を見たり……APIで取得してどっかに送りつけたりして利用します。 なので、まずは接続数とメモリについて復習です。 SHOW STATUS 的には Threads_connected です。 CloudWatch Metrics 的には、DBInstanceIdentifier → DatabaseConnections です。 見た感じ、ど

    RDSで接続数とメモリ消費量の調整事例 | 外道父の匠
    GedowFather
    GedowFather 2020/11/24
    お勉強の教材的なヤツ書きました
  • Aurora運用Tips IOPS編 | 外道父の匠

    久々にAuroraについて、小ネタ系で書いてみるテスト。 主にストレージIOPSにまつわるTipsで、光り輝くモノは別にないですけど、基が大事ということで。 ストレージIOPSのグラフ生成 データベースの運用において、監視データであるメトリクスを色々収集するのは基ですが、その中でも最重要に位置する項目である ストレージのIOPS についてです。 まず、Auroraのストレージ構成は共有型であり、IOPSメトリクスはホスト毎ではなくクラスタ毎のデータとして記録されています。 参考ページ Aurora ストレージエンジンのご紹介 Amazon Aurora DB クラスターメトリクスのモニタリング RDS Aurora の管理画面でモニタリングを見ると、グラフ名が [請求済み] ボリューム読み取り IOPS (カウント) [請求済み] ボリューム書き込み IOPS (カウント) となってい

    Aurora運用Tips IOPS編 | 外道父の匠
    GedowFather
    GedowFather 2020/10/13
    書きました
  • MySQLコンテナでリストア済みイメージ作成 | 外道父の匠

    ひょんなことからコンテナを使ったシステムを構築していて、その部品として MySQL サーバーが必要になりました。 ど~やって用意するのが最も楽で速くて適切かな~って、黒魔術バランス派として考えた結果、こんな感じになりましたよ、という一例でございます。 目的 大雑把に目的をまとめると MySQLサーバーをコンテナで稼働させる ECS Task 内の複数コンテナのうちの1コンテナとする 既存MySQLサーバーのデータをリストアする プラス、構築としても運用としても、できるだけ無駄なく速くしたいという感じです。内容的には後半が番って感じになりそうです。 設計 図を書く気分じゃないので、ザックリと処理順に説明すると 既存MySQLサーバーで、バックアップとS3アップロードを定期実行する S3オブジェクトの更新を発火元としてLambdaを実行する LambdaがCodeBuildを実行する Cod

    MySQLコンテナでリストア済みイメージ作成 | 外道父の匠
    GedowFather
    GedowFather 2020/06/01
    書きました
  • RDSのGeneralLogをパケットキャプチャに切り替える | 外道父の匠

    三年以上前に サービス品質の改善効率を高める仕組み | 外道父の匠 の一部にて、GeneralLog と EXPLAIN を使って、クエリ品質を自動算出していることを書きました。 この仕組みは2011年に開発して以降、言語変更や新環境に適応させたりしつつも、ほぼそのまま稼働し続けていて、最近はRDSが対象になることが多いのですが、RDSだとGeneralLogの採取に問題が発生したので、DBサーバーではなく、ClientでのPythonを使った採取に切り替えてみました、という話になります。 RDSのGeneralLogは高QPSでは非推奨 RDSで GeneralLog を採取するには、パラメータグループで general_log を ON にするしかないのですが、数百qps 程度なら問題なく動いても、数千~万qps となると、ほぼ期待通りに切り替わってくれなくなります。 それまでは、AP

    RDSのGeneralLogをパケットキャプチャに切り替える | 外道父の匠
    GedowFather
    GedowFather 2018/03/06
    書きました
  • AuroraのALTER TABLE性能検証とRDS比較 | 外道父の匠

    よく、Auroraを採用しました、安定しています、移行してよかったです!とか見かけますけど、 なんで快適なのかをちゃんとわかって使ってんのかこの野郎ッp(`・ω・´メ)q 俺も全然わかってねぇッ( ・`ω・´) ということで、今回もいい感じに飽きてきたAuroraです。Aurora。少々気になっていた、ALTER TABLE周りについて興味深い数値が取れたので、その共有で御座います候。 MySQL5.6互換 AuroraMySQL5.6互換というけれど・・・ Q:「MySQL と互換性がある」とはどういう意味ですか? これは、現在お客様が MySQL データベースで使用しているほとんどのコード、アプリケーション、ドライバー、ツールをほとんど、またはまったく変更を加えなくても Aurora で使用できることを意味します。Amazon Aurora データベースエンジンは InnoDB スト

    AuroraのALTER TABLE性能検証とRDS比較 | 外道父の匠
    GedowFather
    GedowFather 2017/02/08
    また地味なの書きました
  • Amazon Auroraを真に理解するための性能検証 | 外道父の匠

    今回は、まだ全然底が見えていないAuroraのガチンコ検証となります。公式資料に、発表当初の簡単な検証数値もありますが、自分でやらないと理解できない部分が多くあるためです。 既にAuroraにするだけで従来より速くなる説は有力ですが、なぜ速くなるのか、どのような点に注意を払って運用すべきなのか、といったことを理解するために、より局所的な検証をいくつか行って考察していきたいと思います。 目次 楽しい検証になって長くなりましたので、目次を置いておきます。 はじめに クエリのレスポンスタイム クエリキャッシュ CPU利用率とIOPSの性質 データ容量とストレージ性能の関係 インスタンスタイプとストレージ性能の関係 運用面の色々 何がボトルネックになるか はじめに いくつか前提的なものを。 ベンチマークは全て、sysbench を使ってテストデータ作成・ランダム参照/更新クエリを実行しています デ

    Amazon Auroraを真に理解するための性能検証 | 外道父の匠
    GedowFather
    GedowFather 2015/11/05
    書きました
  • 続・RDS MultiAZの性能比較値を追加 | 外道父の匠

    前回、無様にも記事公開直前にRDSのMultiAZ分の検証が足りないことに気づいたものの、その時点では飽きてゲッソリしていたので、追試験する気力もなくゴメンナサイしてポチッてしまいました。が、やはり思い直しまして、というか自分でも気になるところなので、恥を忍んでRDSのMultiAZ版のデータも取得して比較考察してみることにしましたウェーイ(ごまかし)。 すぐに取り掛からなかったのは、息子の専用部屋を増やすために同マンション内での引っ越しをしていたからです(近況報告)。それでは、参りましょう。 RDS MultiAZのデータと考察 同期構成についての考察なので、前回データから一部非同期系を削除し、RDS MultiAZのデータを追加(赤枠)しました。 また、結果が思ったよりアレだったので、再びSingleAZでも実行してみましたが、結果はほぼ前回と同じだったのでそのままにしてあります。 R

    続・RDS MultiAZの性能比較値を追加 | 外道父の匠
    GedowFather
    GedowFather 2015/10/27
    お追試させていただきました
  • MySQL5.7 / RDS / Aurora / Cloud SQL の性能比較 | 外道父の匠

    CloudSQLの価格は実戦的という意味で、per Dayの価格を24hourで割った価格にしています。 メモリは2GBあれば検証としては十分なので格差は関係ありません。 IOPSはEBSならGeneral Purposeの1000GB*3で最大確保しています。 その他、ネットワーク周りなどポイントがあれば都度、補足していきます。 ベンチマークのデータ 今回、採取した全データはこちらになります。一部、目的に対して不要と判断したら省略しています。まぁ、こんなオレオレメモデータを見ても楽しくないでしょうから、1つ1つ考察していきましょう。 手法について 私がよくやる計測方法なのですが、innodb_buffer_pool_size がデータ容量より大きい健全な状態と、最小の16MBで過負荷ストレージを演出し、それぞれで参照/更新を別々にランダムアクセスをすることで、最初のボトルネックを炙り出し

    MySQL5.7 / RDS / Aurora / Cloud SQL の性能比較 | 外道父の匠
    GedowFather
    GedowFather 2015/10/23
    書きました…が…
  • MySQL + ioDrive + XFSにおけるbinlogローテート問題 | 外道父の匠

    前回の問題とはまた別件で、今度はbinlogのローテート切り替わりタイミングに更新クエリが停滞する、という問題を調べることになりました。 調査の過程で何を誤ったか、Twitterという魔法陣から最強クラスの重鎮魔神を召喚してしまい、恐れ多くも原因の特定と対応方針の決定ができてヘコヘコな感じでございます。 binlogローテート時の障害 数十分に1回、更新クエリが停滞してアプリケーションにエラーログが残るということから、他のエンジニアが、どうもbinlogの切り替わり時にそれが起きているっぽいことを特定してくれました。発生時は1~3秒は更新機能が停止するので、結構なレベルの障害ということでした。 binlogは1GBでローテートするように設定していたのですが、dstat -d でwrite容量を見ていると、確かに切り替わり時に800~900MBの書き込みを確認できました。 このことから、bi

    MySQL + ioDrive + XFSにおけるbinlogローテート問題 | 外道父の匠
    GedowFather
    GedowFather 2014/05/20
    書きました
  • Percona Server 5.5にて10秒間隔でDisk I/Oが重くなる問題 | 外道父の匠

    久しぶりにDBAとしてお手伝いした時の汚いメモになります。 Percona Server5.5+ioDriveのMySQLで、イベント時やピークタイムにアプリケーションからのDB利用が重くなる、ということで調査から対応方法まで考えてみました。 問題点の大雑把な特定 高トラフィック時に、RubyからMySQLの接続やクエリがちょこちょこ重くなり、レスポンス速度に影響が出る、とのこと。で調査開始。今回のPercona Serverのバージョンは 5.5.34 でした。 top -d1 で触診してみると、謎の10秒間隔でiowaitが5~10%に上がることを確認 5分平均のiowaitグラフを見ても、ピーク時は50~60%であることを確認。ioDriveでこれはイカン dstat で見ると、平時はwrite数MB/s~十数MB/sのところが、やはり10秒間隔でwrite 数百MBを確認。ピーク時

    Percona Server 5.5にて10秒間隔でDisk I/Oが重くなる問題 | 外道父の匠
    GedowFather
    GedowFather 2014/05/09
    調査のメモ書き / sh2先生のリンクその2を追記しました
  • systemtapでファイルシステムキャッシュのヒット率を見る

    systemtapでファイルシステムキャッシュのヒット率を見る 2012-06-18 Linuxでは、自動的にメモリの空き容量をファイルシステムキャッシュ(以下単にキャッシュ)として使用するような仕組みが用意されている。MySQLでMyISAMを使う時のようにOSのキャッシュを使用するような仕組みを使っていたり、単にファイルをNFSで公開しているファイルサーバなどでは、このキャッシュがどの程度効くかによってかなりパフォーマンスが違ってくる。 多数のファイルが読みだされ、かつ読み出し対象ファイルの総容量が物理メモリ容量より多い場合(普通そうだと思うが)、どのくらいのキャッシュヒット率になっているかを知っておくのは、パフォーマンス改善の一助になる。しかし、あるファイルがキャッシュに載っているかどうかを調べたり、ファイルをキャッシュに載せたりするための単純なコマンドというのは実は存在していない(

  • SystemTapでMySQLのDisk I/Oを分析する - SH2の日記

    実験エントリです。 動機 OracleのStatspack/AWRで取れるファイル単位のDisk I/O情報を、MySQLでも採取したい。これは次に示すようなデータです。 File IO Stats DB/Inst: ORA112/ORA112 Snaps: 6-7 ->Mx Rd Bkt: Max bucket time for single block read ->ordered by Tablespace, File Tablespace Filename ------------------------ ---------------------------------------------------- Av Mx Av Av Rd Rd Av Av Buffer BufWt Reads Reads/s (ms) Bkt Blks/Rd Writes Writes/s Wai

    SystemTapでMySQLのDisk I/Oを分析する - SH2の日記
  • サービス品質の改善効率を高める仕組み | 外道父の匠

    最近うぇぶ業界では、開発効率や構築効率を求める動きが活発のように見受けられますが、ここで改善効率について手を伸ばしてみましょう。 改善効率とは、開発後期やサービス開始後の運用フェーズにおいて、クソコードやクソクエリ、データの蓄積によるレスポンスの悪化などを、自動的に検知し、開発者にオラオラ改修をプッシュするための仕組みのことでございます。 はじめに ここで紹介する内容はドリコムで実際に運用しているものですが、別にドヤ顔するようなものではなく、中規模以上の企業ならば似たようなことやそれ以上のことをやっているであろう、至極当然な内容です。それでも、それなりに種類が増えてきたことと、それなりの効果を得られていることが実感できているため、いったんまとめてみようと思った次第です。 ウチのサービスのサーバーサイドは Ruby on Rails + MySQL が基なので、その対策手法になります。WE

    サービス品質の改善効率を高める仕組み | 外道父の匠
    GedowFather
    GedowFather 2014/02/25
    意識高い系を書きました
  • rsyslogのデータをMySQLに保存する | 外道父の匠

    rsyslogのTLS(SSL)暗号化 でCollectorに対してFORWARDしましたが、その続編的な内容になります。 rsyslogにはMySQLやHDFSに保存するモジュールなど色々あり、Collectorで集めたログをどう扱うかと悩んだ結果、今回はMySQLでやってみることにしました。 リンク MySQL Database Output Module rsyslog rsyslogDBに記録する – いますぐ実践! Linuxシステム管理 / Vol.209 バックエンドに Mysql を使用して rsyslog を インストール – harry’s memorandum 選択理由 ログ量が少なくて重要度が低いなら、ローカルファイルでlogwatchとか、 ログが膨大ならBigDataを間借りしてHDFS+Hiveとか考えたけど、 中規模以下ならMySQLが安定だな~と思った

    rsyslogのデータをMySQLに保存する | 外道父の匠
    GedowFather
    GedowFather 2013/09/10
    書きました
  • 1