ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

プログラミング

PostgreSQL にてWHERE句で=演算子の左辺・右辺に同じ列名を指定すると行数推定が不正確になることがある

はじめに WHERE句で=演算子の左辺・右辺に同じ列名を指定したクエリを考えます。 SELECT count(*) FROM seq WHERE value = value;これは以下のクエリと等価です。 SELECT count(*) FROM seq WHERE value IS NOT NULL;value = value で value = NULL であれ…

DBTS2018「今後のDBのトランザクション処理のあり方について徹底討議する」パネラー参加記録

始めに db tech showcase Tokyo 2018 (db tech showcase Tokyo 2018 | db tech showcase) 今後のDBのトランザクション処理のあり方について徹底討議する ~"InvisibleWriteRule: トランザクションの書込み最適化" を中心に にパネラーとして参加してきました…

トランザクションをもっと深く知るための資料集

はじめに データベース(DB)を扱う方にとって、トランザクションは当たり前の存在です。そんな当たり前のものがどういった理論と技術で実現されているか、そしてそれらが今も進化していることをご存知でしょうか。トランザクションをもっと深く知りたい方に向…

PostgreSQLのシリアライザブルとコミット/ロールバックと遅延可能な読み取り専用トランザクションの関係

はじめに PostgreSQLのトランザクション分離レベルにはシリアライザブル(Serializable)があります。ドキュメントのシリアライザブル分離レベルの説明には以下の記載があります。 異常を防止するためにシリアライザブルトランザクションを使用するのであれば…

Bitmap Index Scan の後の Bitmap Heap Scan でRecheck処理が行われることの解説

はじめに PostgreSQL の実行計画において、Bitmap Index Scan の後に実行される Bitmap Heap Scan で "Recheck cond" と出力されます。Index Scan をしているにも関わらず、なぜ Heap Scan でインデックスの検索条件を再チェックする必要があるのか解説しま…

SQLの GROUP BY 句には列名だけでなく式も記述することができる

はじめに 「達人に学ぶSQL徹底指南書」(以下、達人SQL)の「1-1 CASE式のススメ」には GROUP BY 句に CASE 式の含まれるSQLが登場します。達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)作者: ミック出版社/メーカー: 翔泳社発売日: 2008/02/07メディア: 単行…

SQLのGROUP BY句の処理を理解する

はじめに SQLのGROUP BY句の解説記事は多くありますが、本エントリでは他の記事とは解説方法を変え、処理の段階を追って説明します。これにより、これまでGROUP BY句のふるまいにモヤモヤを感じていた方が少しでもスッキリできることを目指します。 また、CA…

PostgreSQLの実行計画の実行順とコスト・実行時間の累積

はじめに PostgreSQLの実行計画の読み解き方は公式マニュアルで説明されています。PostgreSQL 10 でのリンクを示します。 14.1. EXPLAINの利用ですが、若干分かり辛い個所があるため、本エントリでは以下の観点に着目して補足することにします。 ノードの実…

ネストしたサブクエリにOR条件を含むSQLのパフォーマンスをPostgreSQLで改善する

はじめに ネストしたサブクエリ(副問合せ)はEXISTS条件でよく利用されます。ですが、このサブクエリのフィルタ条件次第ではパフォーマンス問題となることがあります。これを Oracle Database で改善する例がOracleの記事(以下、「記事」とだけ表記した場…

Oracle Database の LNNVL を PostgreSQL で実現する

Oracle Database には LNNVL というファンクションがあります。 LNNVL(condition) LNNVL の説明を Oracle Database 12c R2 マニュアルから引用します。 LNNVLは、条件のオペランドの1つまたは両方がNULLの可能性がある場合にその条件を簡単に評価する方法を…

デブサミ2018「【16-C-3】Gitで安定マスターブランチを手に入れる」聴講メモ

はじめに Developers Summit 2018 (Developers Summit 2018) 【16-C-3】Gitで安定マスターブランチを手に入れる スピーカー:井上 誠一郎 さん [ワークスアプリケーションズ] / 三宅 泰裕 さん [ワークスアプリケーションズ]) の聴講メモです。メモは口頭…

デブサミ2018「【16-A-2】ヤフーを支える社内システム」聴講メモ

はじめに Developers Summit 2018 (Developers Summit 2018) 【16-A-2】ヤフーを支える社内システム スピーカー:伊藤 康太 さん [ヤフー] の聴講メモです。メモは口頭説明を中心にまとめています。資料を併せてご参照ください。 ヤフーを支える社内システム…

PostgreSQLマニュアルのトランザクション分離レベル表を参照する際の注意点

はじめに PostgreSQLマニュアル「13.2. トランザクションの分離」にはトランザクション分離レベルの表が記載されています。この表の記載は9.4以前と9.5以降で変わっており、PostgreSQLの挙動が変わったと勘違いしてしまうかもしれません。ですが、マニュアル…

SerializabilityとMonotonicityとRigorousnessの関係

概要 motononeなスケジュールのクラスでは、スケジュールから任意のトランザクションが消失してもスケジュールのクラスが変わりません。CSRはmonotoneです。CSRだけではabortを扱うのが難しいため、ロックによる手法を組み合わせます。SS2PLによって作られる…

PostgreSQLマニュアルの「リピータブルリード分離レベル」における「制御レコード」とはなにか?

PostgreSQL(9.1以降)マニュアルの「13.2.2. リピータブルリード分離レベル」に以下の記述があります。 リピータブルリードモードでは、全てのトランザクションがデータベースの一貫した不変のビューの状態を参照することが保証されます。 しかし、このビュ…

NTTDATATC2017「本当は恐ろしい分散システムの話」聴講メモ

前書き NTTデータ テクノロジーカンファレンス 2017 (NTTデータ テクノロジーカンファレンス2017 デジタルトランスフォーメーション成功のカギ~ Hadoop, Spark, ブロックチェーン | NTTデータのHadoopソリューション) 【テクノロジー】本当は恐ろしい分散シ…

急がば回れ、選ぶなら近道 TX記事 読解メモ

目次 目次 はじめに 前提知識 トランザクションの基礎知識 数学記号 iff Serializabilityの選択 predicate install 参考資料 本エントリでの表記 Welcome back to the TRANSACTION! A Critique of ANSI SQL Isolation Levels再読 A critique of ansi sql iso…

DBTS2017「次世代DB / 分散OLTP(MVCC系)を可能な限り全力で解説」聴講メモ

前書き db tech showcase Tokyo 2017 (db tech showcase Tokyo 2017 | db tech showcase) C31:次世代分散OLTP 次世代DB / 分散OLTP(MVCC系)を可能な限り全力で解説 の聴講メモです。スピーカーはノーチラステクノロジーズの神林さん(@okachimachiorz1)です…

DBTS2017 これからの”本命技術”はこう見つける! まとめ

前書き db tech showcase Tokyo 2017 (db tech showcase Tokyo 2017 | db tech showcase) A12 : KEYNOTE 2 これからの”本命技術”はこう見つける!~ポスト・リレーショナルデータベース時代を読み解くコツ~ のまとめ記事です。本セッションはウルシステムズ…

PostgreSQLの実行計画を読み解くための参考資料集

はじめに PostgreSQLは商用DBに比べて書籍が少なく、まとまった情報が入手しにくいです。また、有志の方がPostgreSQLに関する資料を公開していますが、散在しており、せっかくの有益な情報にアクセスしにくい状況にあります。そこで、本エントリではPostgreS…

PostgreSQLのオブジェクト識別子(OID)とキャスト

目的 オブジェクト識別子(以下、OID)とキャストについては、すでに詳細な解説記事があります。 オブジェクト識別子を活用する | Let's Postgres 本エントリではこの解説記事をベースにしつつ、理解し辛い点を補足します。本エントリの目次を示します。 目的 …

PostgreSQL実行計画のハッシュノードに出力されるバケット数とバッチ数の解説

目的 PostgreSQLの実行計画のハッシュノード(Hash)に出力されるバケット数(Buckets)とバッチ数(Batches)について解説を行います。また、バッチ数とパフォーマンスの関係についても触れます。このテーマについて Pat Shaughnessy さんが英語の解説記事を公開…

「データベースパフォーマンスアップの教科書」の「猶予ハッシュジョイン」説明補足

はじめに 「データベースパフォーマンスアップの教科書」(以下、書籍)はデータベースの内部処理を解説した数少ない本です。その解説にはややわかりづらい点があります。また、その中で取り上げられている「猶予ハッシュジョイン」はネットで情報を探しにく…

テーブル結合における外部表・内部表の選択

目的 テーブル結合の外部表(駆動表)はデータセットの小さい方を選ぶ可能性が高いです。データセットの小さい方を選ぶことでI/Oコストの観点から有利になることを示します。また、オプティマイザの外部表・内部表選択基準の例を挙げます。 疑問 表Rと表Sの…

PostgreSQLの検査制約におけるNULLの扱い

はじめに PostgreSQLを基準とした資格試験の問題集「徹底攻略 OSS-DB Silver問題集[OSDBS-01]対応」にて、以下の検査制約を設定したテーブルに対して、値にNULLを含んだINSERTが成功するか?という問題がありました。 CREATE TABLE points ( col1 INTEGER …

OSS-DB Silver [OSDBS-01] 受験対策教材集

はじめに OSS-DB Silver [OSDBS-01] 受験対策の教材はあまり多くありません。ですが、よく探してみると、自習で役立つ資料が公開されていたりします。 このエントリでは私が受験対策のために実際に使い、参考になったものをご紹介いたします。 テキスト OSS…

OSS-DB silver問題集 [OSDBS-01]対応 補足

OSS-DB Silver [OSDBS-01] 受験対策としてインプレスジャパンの問題集を利用されている方は多いかと思います。徹底攻略 OSS-DB Silver問題集[OSDBS-01]対応 (ITプロ/ITエンジニアのための徹底攻略)作者: SRA OSS Inc.日本支社北川俊広,株式会社アシスト田…

「SQLパフォーマンス詳解」(原文タイトル:SQL Performance Explained)の紹介と購入時のポイント

本の紹介 「SQLパフォーマンス詳解」(原文タイトル:SQL Performance Explained)はデータベースのBツリーインデックスについて解説しています。インデックスの仕組みから実務に活かせるテクニックまで幅広く取り上げられています。 データベースのインデック…

SQLのWHERE句で用いられる相関サブクエリを理解する

はじめに 相関サブクエリもしくはEXISTS述語の使い方として、以下のようなSQLがよく取り上げられます。 SELECT * FROM item i WHERE EXISTS (SELECT * FROM stock s WHERE i.id = s.id); これに対して以下のデータが与えられたとします。◆itemテーブル id na…

SQLのWHERE句の処理を理解する

はじめに SQLのWHERE句は「集合から条件に合致する行を選択する」処理です。 ですが、SQLの様々な書き方を学ぶうちにWHERE句の役割について混乱してしまうことがあるかもしれません。本エントリではこの混乱の解消を目標に説明します。 SQLの実行順序 SQLの…