第227回InnoDBにおけるトランザクション分離レベルREAD COMMITTEDでのロックの挙動 北川健太郎 2024-08-20
近年ではRedashやMetabaseのようなBIツールを簡単に導入でき、さらにはMySQLはバージョン8.0からwindow関数が利用できるようになり、より分析的なSQLを記述する機会が増えた読者もいるかも知れません。このような分析に利用するSQLを記述をすると、どうしても長いSQLになってしまいがちで、記述した当時は理解できても、時間の経過や他人のSQLを読み解くのは難しいときもあります。 そこで、今回は共通テーブル式(CTE)について紹介し、分析時に長くなってしまいがちなSQLの読みやすさ改善に少しでもお役にたてればと思います。なお、今回利用しているMySQLのバージョンは8.0.28となります。 CTEとは? CTEとはCommon Table Expressionsの略で、OracleやPostgreSQLにはすでにあった機能であるため知っている方もいるかもしれません。CTEは単
開発者向けのSQLインデックス解説サイト、管理についての間違いない知識を提供します。 インデックスは開発時には忘れられがちである一方で、非常に効果的なSQLのチューニング方法です。Use The Index, Lukeでは、HibernateなどのORMツールの解説にとどまらず、SQLのインデックスについて基礎から説明します。 Use The Index, LukeはSQLパフォーマンス詳解のWeb上の無料版です。サイトを気に入って頂けたら、ぜひ書籍も購入してみて下さい。また、このサイトの運営をサポートする様々なグッズも販売しています。 MySQL、Oracle、SQL ServerなどにおけるSQLのインデックスUse The Index, Lukeでは、ベンダにとらわれないインデックスの説明を心がけています。製品特有の事柄については、以下のような表示をしています。 DB2Use The
SQLのJOINには3種類のアルゴリズムあるということを最近知ったのでまとめてみる。 JOINのアルゴリズム Nested Loop Sort/Merge Hash 基本知識 DBMSごとの実装状況 Oracle 3種類全部 MySQL Nested Loopのみ PostgreSQL 3種類全部 外部表(駆動表)と内部表 外部表(駆動表) JOINするときのベースになる表。以下のSQLでいえば、table1 内部表 外部表にくっつける表。以下のSQLでいえば、table2 特徴 Nested Loop Join 外部表にある全行に対して、内部表から結合キー列の値がマッチするものを探して結合する 上記に関連して、外部表にあるレコードが少ないほうがループ数を少なくできるため高速にできる 内部表の結合キー列にインデックスがある場合、インデックスを用いて検索できるため高速に処理できる Sort
"Nested Loop Joinしか取り上げて無いのにタイトルが大きすぎないか" と指摘を頂いたので、タイトルを修正しました。Merge JoinとHash Joinのことはまた今度書こうと思います。 「JOINは遅い」とよく言われます。特にRDBを使い始めて間がない内にそういう言説に触れた結果「JOIN=悪」という認識で固定化されてしまっている人も多いように感じています。 たしかに、JOINを含むようなSELECT文は、含まないものに比べて重たくなる傾向があることは事実です。また、本質的に問い合わせたい内容が複雑で、対処することが難しいものも存在します。しかし、RDBの中で一体どういうことが起きているのかを知り、それに基いて対処すれば高速化できることも少なくないと考えています。 本稿では、JOINの内部動作を解説した上で、Webサービスを作っているとよく出てくるJOIN SQLを例題に
はじめに私が所属しているチームでは、ERDの管理およびDDL生成のために、A5:SQL Mk-2(以下A5M2)を利用しています。全員がそこまで使ったことがあるわけでなく、徐々にかゆいところに手が届く機能を知り利用してよかったと思っています。 そこで、開発を通して最初から知っていれば嬉しかったなという機能をまとめます。使いこなしているチーム(人)に確認したら全て当たり前に使っていたので、常識レベルらしいです。 A5:SQL Mk-2 - フリーのSQLクライアント/ER図作成ソフト (松原正和) なお、a5m2 ってどういう機能があるんだという方は、宮崎さんの A5:SQL Mk-2に回帰した話 を参照ください。また、SQLクライアントとして a5m2 を使う話はしません。余談ですが個人的にはSQLクライアントとしてはJetBrainsで特に有料製品を使っている方はDatabase Too
株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 パフォーマンス勉強会OracleデータベースMySQLInnoDB こんにちは、羽山です。今回はOracleデータベースのチューニングで少し踏み込んだ内容です。途中で比較対象としてMySQLも登場します。 日頃からSQLチューニングの機会があってそれなりに得意としているのに、それでもなぜかパフォーマンスがでないSQLに悩んだ経験はありませんか? 謎の遅い現象は特に大規模データベースになってくると発生しがちなのですが、速い場合も遅い場合も必ず理由があります。そこで本記事ではデータベースのチューニングにおいて意外と見落とされがちなローレベルな部分に着目して、さらに一歩上のパフォーマンスチューニングに必要な知識を解説します。 この記事を書くきっかけとなったのは私た
この本では、データベース構築経験が初心者・入門者の方々に向けて、データベース構築に必要な知識(SQLを中心)を1時間ほどでサクッと理解できるようにまとめました。※短時間での走り切りをゴールとしているため、細かい説明は省略されています。 【概要】 ・内容:データベース基本知識 / 用語、SQLとは、NoSQLとは、NewSQlとは、データモデル(概念モデル / 論理モデル / 物理モデル)、SQL命令言語(DML / DDL / TCL / DCL)、SQLの環境構築、SQLの基本文法、SQLによる絞り込み、SQLによるデータ加工、SQLによるテーブル処理・分析、SQLによる複数テーブルの処理、SQLによるトランザクション処理 ・所要時間:約1時間 ・必須条件:パソコン操作 ・推奨OS:なし ・レベル:★★☆☆☆
こんにちは!ベトナムからリモート中のエンジニア、コアです。 複雑のSQLクエリを書く際に、おそらく皆さんが一時テーブルを使用したことがありますよね。 今回、一時テーブルと似ているCTEを紹介したいと思います。 CTEとは「Common Table Expression」(共通テーブル式)の略語です。 CTEはWITH句で定義された名前付きサブクエリです。CTEは単純なクエリから派生し、単一のSELECT、INSERT、UPDATE、DELETE、MERGEステートメントの実行スコープ内で定義されます。 CTEは、モジュール性を高め、メンテナンスを簡素化します。 構文 WITH cte_name [(col1,...n)] AS ( SELECT col1,...n FROM someTable .......... ) SELECT * FROM cte_name WITH totalOr
これは、FORCIA Advent Calendar 2021の3日目の記事です。 どうもこんにちは。 タブをスペースに変換するのを忘れてpsqlに怒られがちな新卒2年目の駆け出しエンジニア吉田です。(Web業界に2年近くもいて「駆け出し」を名乗ってよいものか微妙ですが、強気に主張していきます) 私はここ一年間、大規模旅行アプリの開発に携わってきました。旅行アプリの検索機能は、フォルシアの主力事業であるSpookが最も威力を発揮する領域でもあります。 Spookは「膨大で複雑なデータ」を「高速」に検索するための技術基盤です。(参考: https://www.forcia.com/service/spook/) 参考記事にもある通り、Spookの高速検索は「独自の検索最適化技術」と「これまで培ってきたノウハウ」の合わせ技の上に成り立つものです。技術とノウハウを駆使して高速なDB検索をすること
はじめに私はプロジェクトでシステムテスト、場合によっては本番稼働で起きる性能問題についてSQLチューニングを行ってきました。皆さんの中で、SQLチューニングは「専門的な知識」が必要とか「高レベルなスキル」を要求されると思っている方が居るかも? っと思い、このネタを扱いました。 確かにそういった内容もある事はあります。 ただ、多く(体感8割くらい)の性能問題については本当に単純なもので解決できます。特に昨今のFutureでは脱Oracleを掲げており、安価なDB製品を使う事による性能問題は如実に出てきています。そのため開発者一人一人が意識して性能問題を駆逐することにより、生産性・品質・コストに貢献できると考えこのお題にしました。 テーブル設計の基本 なぜSQLの話でテーブル設計?何故SQLの話でテーブル設計の話が出るかというと、テーブル設計でSQLの構成が決まるからです。そのため、SQLを考
はじめに皆様、こんにちは。Google Cloud Japan Customer Engineer Advent Calendar 2020 の 8 日目は 今年公開された BigQuery のリサーチペーパーを読んでみて個人的に興味があった点をまとめてみようと思います。2020 年で 10 周年を迎えた BigQuery の進化の過程が理解できるので皆様もお時間あればご一読を! TL;DRこのホワイトペーパーは、Dremel (BigQuery のクエリエンジン) が採用している主要なアーキテクチャや考え方(これらのいくつかはクラウドネイティブなデータウェアハウスではトレンドとなりつつあります)がこの10 年間でどのような進化を経て現在の BigQuery になったのかを、Seattle Report on Database Research というレポート内で述べられている主要な 5
はじめに CX事業本部の佐藤智樹です。 先日DynamoDBについて以下の発表がありました。 え!?DynamoDBでSQL使えるようになるの?何がどこまでできるのか気になったのでドキュメントを参照しながら試してみたいと思います。 正確にはSQL互換のクエリ言語のPartiQLを使いますが、本稿ではSQLと呼称して記述していきます。 DynamoDB+PartiQLの操作についてはこちらのブログでも確認できます。こちらはAWS CLIを使用した操作について書かれています。 ドキュメント ドキュメントは以下から確認できます。 アクセス方法は現状以下の3パターンあるようです。 DynamoDBのWebコンソール(新バージョンのみ) AWS CLI AWS SDK(Java) 今回はWebコンソールで操作を試してみます。 CRUD操作してみた WebコンソールからSQLを実行します。まず最近でた
2020年12月10日、「BIツール研究所」という"すべてのBIツールを扱うユーザーが交流・情報交換をするためのコミュニティ"によるイベント「BIツールカジュアル座談会 ~Lookerの集い~」が開催されていました。Lookerを扱っている弊社としては興味深いテーマのイベントでしたので参加(聴講)してきました。 当エントリではその内容についてイベントレポートの形でお届けします。 目次 登壇者 イベント関連リソース イベントレポート 1.製品の特徴を客観的に整理 2.環境要因に対するメリット・デメリットの紹介 3.専門家が熱く推すポイントの紹介 4.それLookerでできます! まとめ 登壇者 この日イベントに登壇されたユーザーの皆様の情報は以下の通りです。 司会:前側 将氏(@willanalysts、オープンエイト) 登壇者 佐々木 江亜氏(@0610Esa、マネーフォワード 分析推進室
こんにちは。MackerelチームにおいてCRE(Customer Reliability Engineer)をしているid:syou6162です。主にカスタマーサクセスを支えるデータ基盤の構築や、データ分析を担当しています。 今回は、壊れにくいデータ基盤を構築するため、Mackerelチームで実践していることを紹介します。 なぜ壊れにくいデータ基盤を構築するのか データ基盤が“壊れている”とはどういうことか 壊れてないだけでなく、壊れたら気付ける 前提とするシステム構成 壊れたことに気付けるよう監視する 1. バッチジョブが失敗したことに気付く 2. 投入されたデータの性質を監視する 3. ビューが壊れてないかを監視する 4. 利用状況を監視する そもそも壊れてない状態を保つ 1. データリネージを元に修正できるようにする 2. 使われていないテーブルやビューは定期的に掃除 おわりに 参
今日私はいくつかの複雑なMySQLクエリを試してみましたが、MySQLのLEFT JOINがWHERE句で動作していないことに気付きました。つまり、いくつかのレコードが返されますが、右側に空のレコードは返されません。 たとえば、テーブルがあるとします。 albums ; albums_rap id artist title tracks ; id artist title rank ---- -------- ---------- --------------- ; ---- --------- ----- -------------- 1 John Doe Mix CD 20 ; 3 Mark CD #7 15 2 Mark CD #7 35 ; そして、このクエリを実行すると: SELECT t1.artist as artist, t1.title as title, t1.trac
Editor’s note – This is the first part of a two-part series on database storage engines: A Busy Developer’s Guide to Database Storage Engines — The Basics (this post)A Busy Developer’s Guide to Database Storage Engines — Advanced TopicsWhen evaluating operational databases, developers building distributed cloud applications tend to focus on data modeling flexibility, consistency guarantees, linear
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く