タグ

dbに関するbopperjpのブックマーク (245)

  • explainだけじゃわからない!MySQLのindexの考え方 - BASEプロダクトチームブログ

    はじめに こんにちは、バックエンドエンジニアのSakiです!バックエンドでPHPを書いたり、PHPという言語そのもののメンテナーもしています。 この度、注文データダウンロードAppのパフォーマンスをアップさせるため、とても入念にデータベースまわりの処理を見直しました。その中でも特に速度に関わってくる「index」についての考え方をまとめたいと思います。 この記事はMySQL(InnoDB)についての記事であり、他のRDBについては当てはまらない場合もあるということにご注意ください。 indexとは何か、おさらい ご存知の方ももちろん多いと思いますが、indexについておさらいさせてください。 indexとは辞書でいうところの目次に相当するもので、目的のデータをいち早く検索するために重要なものです。もし辞書に目次が存在しなかった場合、目的の情報を探すのにとても苦労するだろうというのは想像しや

    explainだけじゃわからない!MySQLのindexの考え方 - BASEプロダクトチームブログ
  • MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

    MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル MySQL InnoDB および AWS Aurora や PingCAP TiDB におけるロックの仕組みやトランザクションの動作を全11回のシリーズで解説します! 最初はベースとして重要な MySQL 8.0 InnoDB 前提でユーザー視点でのロックの仕組みを学び、後半第10回以降では MySQL 互換 DB として人気の高い AWS Aurora や PingCAP TiDBMySQL InnoDB との違いについて学びます。 1回目の今回はロック機構と切っても切り離せないトランザクションとその分離レベルについて、実際に挙動を確かめながら解説します。ライブ感のある説明も理解に役立ちますので、解説動画も付けてみました。合わせてご覧ください! ★ 第1回 トランザクション分離レベル ★ 第2回 ロ

    MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ
  • MySQLのSQLクエリチューニングの要所を掴む勉強会を開催しました! - ANDPAD Tech Blog

    こんにちは!DBREの福間(fkm_y)です。先月、弊社でデータベースの技術顧問をして頂いてる三谷(mita2)さんに開発部向けの「MySQL SQLチューニング」勉強会を実施していただきました。 今回はMySQLの得意不得意なことの説明やSQLチューニングの流れ、具体的な事例を元にした対応例、また最近話題のHTAPな製品も紹介していただきとても参考になったのでポイントをおさえてレポートをお伝えします! 開催背景 MySQL の得意なこと、苦手なこと データベースのチューニング手段と特徴 SQLチューニングの流れ インデックス SQLチューニング例 インデックスフルスキャンとカバーリングインデックス ソート まとめ 当日の資料 さいごに 過去開催されたデータベース勉強会レポート 開催背景 弊社では三谷さんによるデータベース勉強会を定期的に開催しています。数年前にも同じテーマで勉強会

    MySQLのSQLクエリチューニングの要所を掴む勉強会を開催しました! - ANDPAD Tech Blog
  • MySQLのCOUNTを速くする(?)SQL1本ノック その1

    この記事は MySQL Casual Advent Calendar 2016 の19日目の記事です。 「MySQLのCOUNTが遅いなー」って言うと、「トリガーでサマリーテーブル作ったら?」と言われること、多くありませんか? 特に @soudai1025 に言われる率が高い気がしています(個人の感想です) 個人的にはトリガーよりは同じトランザクションの中でカウンターテーブル(サマリーテーブルと違うもののつもりで言ってるけど、世の中でいうサマリーテーブルの中にはこの形式が含まれるかも知れない)をUPDATEする方が好き(だって、トリガーはブラックボックスになるんだもの)なんですが、頭の体操ということでトリガーで組んでみましょう。 サンプルテーブルはこんな感じ。 mysql57> SHOW CREATE TABLE game_score\G *************************

    bopperjp
    bopperjp 2024/04/18
    カウントを速くする
  • YugabyteDB 構成パターン紹介

    前回の記事では、分散データベース YugabyteDB のユースケースについて紹介しました。 YugabyteDB はオンプレミスやクラウドはもちろん、マルチクラウドやハイブリッドクラウドも含め、様々な環境に対応しております。また、YugabyteDB では構成パターンや構成オプションが多く用意されており、アプリケーション要件に応じて、柔軟に環境や構成を選ぶことができます。 記事では、これから YugabyteDB を使ってみたい、または構成を検討している方向けに、次の5つの YugabyteDB の構成パターンについて紹介します。 シングルリージョンマルチAZ マルチリージョン xCluster 地理的パーティショニング リードレプリカ 構成パターン1:シングルリージョンマルチAZ YugabyteDB をデプロイするときに、まず最初にシングルリージョンを利用するのか、マルチリージョン

    YugabyteDB 構成パターン紹介
    bopperjp
    bopperjp 2024/04/05
  • MySQL(InnoDB)のSQLパフォーマンスチューニングのエッセンス

    はじめに MySQL(InnoDB)でSQLのパフォーマンスチューニングをするときに役に立つ知識をエッセンスとしてまとめました。結合(JOIN)やB-treeインデックスの探索の仕組み、実行計画の基的な見方を紹介します。 想定する読者は、SQLのパフォーマンスを改善する必要があるが実行計画をみてもいまいちピンと来ない方です。インデックスの作成の経験や、複合インデックスやカーディナリティの知識があることを前提にしています。目標は、実行計画の内容がよく分からない読者が、実行計画をみただけでクエリが実行される様子をイメージでき、自信を持ってクエリの改善にあたることができるようにすることです。 ストレージエンジンはInnoDBを前提としています。また、インデックスはB-treeインデックスを想定しています。全文検索の転置インデックスや空間検索のR-treeインデックスについては触れません。 イン

    MySQL(InnoDB)のSQLパフォーマンスチューニングのエッセンス
  • データベース: トランザクション分離レベルについてまとめてみる

    1. ダーティーリード ダーティリードはトランザクション処理において、あるトランザクションが更新されている最中に、他のトランザクションからデータを読み出すことができてしまう現象のこと。 ここではトラン2が"りんご"を"みかん"に変更した後、トラン1が"みかん"を読み込むがその後、トラン2によって"みかん"は"りんご"にロールバックされます。 汚れ(誤り)のあるデータを読み込んでいることがわかります。 図の例の場合の対策例としてはトランザクション2が専有ロック(他のトランザクションによる書き込み、読み込み不可)を対象の行にかける等が考えられます。 2. ノンリピータブルリード(ファジーリード) 読み出した行がほかのトランザクションにより更新または削除され、同じトランザクションで再度同じ行を読み込んだときに、その行が更新または削除されていること。 ここではトラン1が"りんご"を読み出した後、ト

    データベース: トランザクション分離レベルについてまとめてみる
    bopperjp
    bopperjp 2024/01/05
  • DBアーキテクチャの比較と選択

    Database Engineering Meetup #1 DBアーキテクチャの比較と選択 Cloud-native storage service for bulk load & random lookup workload https://scalar.connpass.com/event/298887/

    DBアーキテクチャの比較と選択
    bopperjp
    bopperjp 2023/12/21
  • MySQL SQLパフォーマンス改善 -実行計画の確認ポイント-

    記事の目的 記事では MySQL(InnoDB) の SQL 性能調査・改善のために、実行計画の主要な確認ポイントを整理します。 また、SQL の重要な要素であるインデックスについても基を簡単におさらいします。 なお、MySQL 実行計画の各種項目の意味は公式サイトに記載があるが、ぱっと見た時にどれが SQL の性能において重要度が高いのか少しわかりずらかったりしたので、今後のためにも記事に残すことにしました。 SQL パフォーマンスまわりで参考になった書籍や記事も最後に紹介していますので、ぜひそちらも合わせて参考にしてみてください。 インデックスとは インデックスはデータベースの中で特有の構造を持ち、CREATE INDEX 文で作成可能です。 SQL の性能に関わる重要な要素です。 データベースのインデックスは、分厚い紙の辞書から特定の用語を検索することに似ています。あらかじめ順

    MySQL SQLパフォーマンス改善 -実行計画の確認ポイント-
    bopperjp
    bopperjp 2023/11/09
    実行計画
  • MySQL EXPLAIN ANALYZE

    bopperjp
    bopperjp 2023/11/06
    実行計画の読み方
  • MySQLのEXPLAIN ANALYZEの読み方を勉強したよ - Qiita

    ミライトデザインアドベントカレンダー3日目です。 ミライトデザイン Advent Calendar 2021のカレンダー | Advent Calendar 2021 - Qiita 昨日は@tkek321さんのKeycloakでOIDC認可コードフローをやってみる記事でした。 OIDCを実際に動かしながら勉強できるので、凄く頭に入ってきやすい良記事でした! 日は、MySQLに関して最近自分が勉強したことを記事にさせていただきます。 概要 MySQL 8.0.18からEXPLAIN ANALYZEが導入されました。 PostgreSQLでは昔からある機能ですが、MySQLに導入されたのはつい最近のことです。 この記事ではEXPLAIN ANALYZEの読み方について、自分が学んだ内容をご紹介できればと思います。 EXPLAIN ANALYZEってそもそも何? その前にEXPLAINって何

    MySQLのEXPLAIN ANALYZEの読み方を勉強したよ - Qiita
    bopperjp
    bopperjp 2023/11/06
    実行計画(explain analyze)
  • Railsで秒間1000コミットを捌くにはどうすればいいのか (Kaigi on Railsのフリースペースより) - joker1007’s diary

    先日のKaigi on Rails中の雑談として @ima1zumi さんから、RDBに対して秒間1000コミットぐらいで処理が詰まってる場合ってどうするのが良いのか、という質問を受けまして、雑談の中で色々答えてたんですが、せっかくだから記事にまとめておこうと思います。 ちょっとしたKaigi Effectって感じですね。 今回のKaigi on Railsのトークの中では、 数十億のレコードを持つ5年目サービスの設計と障害解決 by KNR - Kaigi on Rails 2023 の話なんかは割と関連がありますね。ユーザーの行動履歴というのは、ユーザー数 * N * タイムスパンで増えていくレコードなので、書き込みとデータ量が爆発しがちです。トランザクションで堅牢に処理しなければいけないケースもそこまで多くないので、RDBだと書き込みに対する処理が過剰なケースが多い。実際のところこの

    Railsで秒間1000コミットを捌くにはどうすればいいのか (Kaigi on Railsのフリースペースより) - joker1007’s diary
  • MySQLのインデックス活用法(InnoDB) - Qiita

    データベースの検索を高速化するには、とにかくI/O(ディスクアクセス)の回数を減らすことが重要とのことです。 そのための方法のひとつが、インデックスになります。 学習を深めるに当たって、かなりいろいろなサイトを参考にさせていただいたので、参考リンク&引用元として載せております。素晴らしい記事を書いてくださった皆様に感謝です。 mysql 5.5〜(InnoDB) (記事作成:2016年3月) 目次 インデックススキャンとは インデックスのアルゴリズムと B-Tree インデックスの種類 複合インデックスと Covering Index インデックススキャンとは データベースの問い合わせ手法として、シーケンシャルスキャンとインデックススキャン、フルテーブルスキャンがあります。 シーケンシャルスキャン (Sequential Scan) シーケンシャルスキャン(順次検索)は、すべてのデータを順

    MySQLのインデックス活用法(InnoDB) - Qiita
  • ActiveRecord の接続管理の仕組み

    ActiveRecord がデータベースとの接続をどう管理しているのかを調べたメモ。主に active_record/connection_adapters 以下の話。現時点での main ブランチの HEAD を参照した。 詰まったときに調べる箇所のあたりを付けられるよう全体観を持ちたいという目的だったので、細かい部分まで把握しきれていはおらず、ご了承ください。 ActiveRecord の使い方のおさらい まず最初にユーザーとして、ActiveRecord でデータベースにクエリを発行する際の流れを簡単におさらいする。 まずデータベースの接続情報を database.yml に記載する。ここではメインとなる primay DB と animals DB の 2 つがあり、またそれぞれに primary (master) と replica があるとする (この例は Active Rec

    ActiveRecord の接続管理の仕組み
  • オンライン DDL を期待して ALTER 文を実行したら障害になりかけた話 - カミナシ エンジニアブログ

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

    オンライン DDL を期待して ALTER 文を実行したら障害になりかけた話 - カミナシ エンジニアブログ
  • 非公式MySQL 8.0オプティマイザガイド by yakst

    View the Project on GitHub はじめに サーバーアーキテクチャー B+ツリー インデックス Explain オプティマイザ トレース 論理変換 コストベース最適化 ヒント プランの比較 複合インデックス カバリングインデックス Visual Explain 変わりゆく実行計画(Transient Plans) サブクエリー 共通テーブル式(CTE)とビュー 結合 集約 ソート パーティショニング クエリーリライト 不可視インデックス クエリープロファイリング JSONと生成列 文字セット 非公式MySQL 8.0オプティマイザガイド 日語版 原文URL: http://www.unofficialmysqlguide.com/ 翻訳者: doublemarket (@dblmkt) The Unofficial MySQL 8.0 Optimizer Guideの

  • Boolean のカラムを生やす前に考えたいこと

    その方が単純に情報量が増えるため 最初 boolean にしてたけど後から時刻もほしくなるということはよくある。後から日時型のカラムに変えようと思っても、過去のイベントの日時は失われてしまっていて困る。今は日時が必要でないように感じても日時にしておく方がよい。 またアプリケーション的に使わなくても、データ分析のためにあると嬉しいことは多い。 コード的にも特に扱いにくくなることはない 以下のようにして簡単に boolean と同じ感覚で扱うことができる。 class Post < ApplicationRecord scope :unpublished, -> { where(published_at: nil) } scope :published, -> { where.not(published_at: nil) } def published? !published_at.nil?

    Boolean のカラムを生やす前に考えたいこと
    bopperjp
    bopperjp 2023/10/13
  • MySQLをチューニング、そしてスケールアップ/スケールアウトへ 記事一覧 | gihyo.jp

    第2回MySQLチューニング(1) MySQLチューニング、その前に 梶山隆輔 2015-02-17

    MySQLをチューニング、そしてスケールアップ/スケールアウトへ 記事一覧 | gihyo.jp
  • ページネーションのガイドライン | GitLab

    bopperjp
    bopperjp 2023/10/02
    pagination
  • offsetでページネーションは遅い。これからはシーク法だ! - Qiita

    動機 ページネーションは​​ページングと呼ぶこともありますが、 ページネーションでググるとoffsetを使った例(便宜上オフセット法と呼びます)がよくでてきます。 でも、これ遅いです。どれだけ遅いかはデータベース毎に調べたたのでこちらを参照(で、オフセット法に比べてシーク法のページネーションはどれだけ早いの?RDB毎に。)。 で、これを解決する方法にシーク法(後述)がありまして、かなり高速なのでお薦めです。 が、シーク法のsqlはちょっと複雑なので(特にorder by句に3項目以上の項目があり、 且つascやdescが組み合わさった場合)、後で見返すために覚書として。 シーク法の参考URL Faster SQL Pagination with Keysets, Continued Posted on November 18, 2013 USE THE INDEX,LUKE! 次ページの取

    offsetでページネーションは遅い。これからはシーク法だ! - Qiita
    bopperjp
    bopperjp 2023/10/02
    cursor pagination でも境界の抽出ができる?