はてなブックマークアプリ

サクサク読めて、
アプリ限定の機能も多数!

アプリで開く

はてなブックマーク

  • はてなブックマークって?
  • アプリ・拡張の紹介
  • ユーザー登録
  • ログイン
  • Hatena

はてなブックマーク

トップへ戻る

  • 総合
    • 人気
    • 新着
    • IT
    • 最新ガジェット
    • 自然科学
    • 経済・金融
    • おもしろ
    • マンガ
    • ゲーム
    • はてなブログ(総合)
  • 一般
    • 人気
    • 新着
    • 社会ニュース
    • 地域
    • 国際
    • 天気
    • グルメ
    • 映画・音楽
    • スポーツ
    • はてな匿名ダイアリー
    • はてなブログ(一般)
  • 世の中
    • 人気
    • 新着
    • 新型コロナウイルス
    • 働き方
    • 生き方
    • 地域
    • 医療・ヘルス
    • 教育
    • はてな匿名ダイアリー
    • はてなブログ(世の中)
  • 政治と経済
    • 人気
    • 新着
    • 政治
    • 経済・金融
    • 企業
    • 仕事・就職
    • マーケット
    • 国際
    • はてなブログ(政治と経済)
  • 暮らし
    • 人気
    • 新着
    • カルチャー・ライフスタイル
    • ファッション
    • 運動・エクササイズ
    • 結婚・子育て
    • 住まい
    • グルメ
    • 相続
    • はてなブログ(暮らし)
    • 掃除・整理整頓
    • 雑貨
    • 買ってよかったもの
    • 旅行
    • アウトドア
    • 趣味
  • 学び
    • 人気
    • 新着
    • 人文科学
    • 社会科学
    • 自然科学
    • 語学
    • ビジネス・経営学
    • デザイン
    • 法律
    • 本・書評
    • 将棋・囲碁
    • はてなブログ(学び)
  • テクノロジー
    • 人気
    • 新着
    • IT
    • セキュリティ技術
    • はてなブログ(テクノロジー)
    • AI・機械学習
    • プログラミング
    • エンジニア
  • おもしろ
    • 人気
    • 新着
    • まとめ
    • ネタ
    • おもしろ
    • これはすごい
    • かわいい
    • 雑学
    • 癒やし
    • はてなブログ(おもしろ)
  • エンタメ
    • 人気
    • 新着
    • スポーツ
    • 映画
    • 音楽
    • アイドル
    • 芸能
    • お笑い
    • サッカー
    • 話題の動画
    • はてなブログ(エンタメ)
  • アニメとゲーム
    • 人気
    • 新着
    • マンガ
    • Webマンガ
    • ゲーム
    • 任天堂
    • PlayStation
    • アニメ
    • バーチャルYouTuber
    • オタクカルチャー
    • はてなブログ(アニメとゲーム)
    • はてなブログ(ゲーム)
  • おすすめ

    新内閣発足

『MasahikoSawada』

  • 人気
  • 新着
  • すべて
  • UUIDの生成速度を上げる取り組み

    56 users

    masahikosawada.github.io

    背景 PostgreSQLのランダムデータ生成方法 uuid createではgetrandom()を使っていた 実際どれくらい違うのか? PostgreSQLでもgetrandom()が使えるのか? getrandom()のvDSO実装でUUID生成を比べてみる vDSO実装のgetrandomを使ってUUIDを生成してみる 参考資料 以前PostgreSQL 18でUUIDv7がサポートされたという記事を書きました。今回は現在取り組んでいるUUIDv7の生成を早くするための改善について、その背景や検証内容についてです。 背景 UUIDの生成速度が気になったきっかけは、PostgreSQLで色々なUUIDv7生成方法を比較していた時に、PostgreSQL 18で導入される予定のuuidv7()関数とpgrxで自前で作ったUUIDv7生成関数の性能比較をしていたときでした。 Postgr

    • テクノロジー
    • 2025/10/30 19:10
    • PostgreSQL
    • UUID
    • DB
    • linux
    • performance
    • あとで読む
    • セキュリティ
    • mysql
    • PostgreSQLでトランザクションIDをできるだけ早く消費する方法

      4 users

      masahikosawada.github.io

      1. ストアドプロシージャを使ってトランザクションを消費する 2. pg_resetwalを使う 3. 内部的にXIDをスキップする 4. 内部的にXIDを高速に”進める” 本記事はPostgreSQL Advent Calendar 2023 21日目の記事です。 PostgreSQLのトランザクションID(以下XID)は内部的には「単調増加する32bitの非負整数値」なので、2^32-1に達した後は0に戻ります。PostgreSQLでは、データベースに変更を加えるトランザクションに対して1つXIDが割り当てられます。XIDの大小関係を利用してテーブル内の行の可視性判断[^visibility]をしているので、XIDが上限に達して周回してしまうとそのロジックが壊れてしまいます。 そこでPostgreSQLでは周回が起こる前(具体的にはXIDを2^31(≒約20億)個消費する前)に、agg

      • テクノロジー
      • 2023/12/21 09:06
      • PostgreSQLの色んなINSERTの仕方

        4 users

        masahikosawada.github.io

        Datum insert_executor(PG_FUNCTION_ARGS) { Relation rel; Oid nspid, relid; EState *estate; ResultRelInfo *relinfo; RangeTblEntry *rte; TupleTableSlot *slot; /* Open table "test" */ nspid = get_namespace_oid("public", false); relid = get_relname_relid("test", nspid); if (!OidIsValid(relid)) elog(ERROR, "table \"%s\" does not exist", "test"); rel = table_open(relid, RowExclusiveLock); /* Set up execu

        • テクノロジー
        • 2023/01/31 10:12
        • DB
        • PostgreSQLのMVCCとガベージコレクション(Vacuum)

          5 users

          masahikosawada.github.io

          同時実行制御とトランザクションID コミットログ スナップショット ガベージコレクション(VACUUM) ロングトランザクション”扱い”となるもの テーブルのVacuum インデックスのVacuum 最後に このエントリはPostgreSQL Advent Calender 2021の22日目の記事です。 shallow1729さんのMVCCとInnoDBでの実装についてという記事を読んで、これのPostgreSQL版を書きたいなと思い書いてみました。 同時実行制御とトランザクションID PostgreSQLは複数のクライアントがトランザクションを同時に実行することが可能で、各トランザクションは他のトランザクションの影響を受けずに処理します。これはトランザクションのACID特性の隔離性(Isolation)の特性です。 以下に簡単な例を挙げます。 -- トランザクションA 開始 BEGIN

          • テクノロジー
          • 2021/12/22 20:52
          • MVCC
          • ガベージコレクション
          • PostgreSQL
          • トランザクション
          • PostgreSQL 14でのBtreeインデックスのVacuum関連の改善についての解説

            6 users

            masahikosawada.github.io

            vacuum_cleanup_index_scale_factorの廃止 Btreeのページリサイクルの改善 ページ内に記録するトランザクションIDを64-bit トランザクションIDに変更 Vacuum(とautovacuum)は、テーブルとインデックスのゴミ掃除をした後にindex cleanupと呼ばれる「インデックスVacuumの後処理」のようなものを実行します。実際の処理内容はインデックスの種類によって異なりますが、index cleanupの主な目的はインデックスの統計情報(ページ数、タプル数)を取得することです(インデックスによっては、削除済みページの回収など、他の処理を行う場合もあります)。インデックスのゴミ掃除をした場合(つまりテーブルにゴミがある状態でVacuumが実行された場合)は、インデックスの統計情報はすでに取得済みなので、index cleanupでは何もしませ

            • テクノロジー
            • 2021/08/18 09:08
            • 今年はPostgreSQL開発に参画してみたいという人のためにレビューしやすいパッチを選びました

              7 users

              masahikosawada.github.io

              パッチレビューの仕方 必要なもの レビューで貢献するともれなく・・・ おすすめパッチ Clients Documentation Miscellaneous Monitoring & Control Performance Replication & Recovery SQL Commands System Administration 注意点 最後に 昨年9月にPostgreSQL 13がリリースされましたが、PostgreSQL開発コミュニティでは現在PostgreSQL 14の開発を行っています。PostgreSQLの開発はCommitfestと呼ばれるWebページにパッチを登録し、みんなで1ヶ月間レビューする、という形で行われます。PostgreSQL 14に向けたCommitfestはすでに3回行われていて、2021年1月1日から第4回が始まりました(3月から始まる第5回が最後)

              • テクノロジー
              • 2021/01/06 07:50
              • あとで読む
              • PostgreSQLのソースコードの構造

                75 users

                masahikosawada.github.io

                どこで手に入るの? 何がはいってるの? srcディレクトリを見てみる src/backendディレクトリにあるサーバ側のコードを見てみる ソースコードを読む際に知っておくと便利な関数 SQLを受け取り、処理する所 COPYやALTER TABLE等のDDLやSQLコマンドを実行する所 ソースコードを読む時に知っておくと便利な事(2020/12/15 追記) palloc()とpfree()関数 ereport()とelog()関数 先日のPostgreSQLアンカンファレンスでPostgreSQLのソースコードのディレクトリ構成や読み方について簡単に紹介しました。 ソースコードのディレクトリ構成は今後変わる予定があるので、ブログにまとめて今後も適宜アップデートしていこうと思います。 以下の説明はPostgreSQL 13をベースとしています。 どこで手に入るの? 公式のgitリポジトリ g

                • テクノロジー
                • 2020/12/14 17:42
                • postgresql
                • あとで読む
                • Git
                • MySQL
                • techfeed
                • サーバ
                • github
                • Pocket
                • VACUUMのログの読み方(VACUUM VERBOSE)

                  3 users

                  masahikosawada.github.io

                  Vacuumのフェーズ VACUUM VERBOSE VACUUM VERBOSEログの読み方 終わりに Vacuumとうまく付き合っていくためにVACUUM VERBOSEログの読み方を簡単に紹介します。また、log_autovacuum_min_durationで出力されるautovacuumのログも大体同じです。バージョンは12.2を使います。VACUUM VERBOSEの出力内容はバージョンによって異なる可能性があるのでご注意ください。 Vacuumのフェーズ Vacuumは細かく分けると7個のフェーズに分かれていますが、ざっくり3つのフェーズに分けて考えることができます。 Scan phase テーブルを先頭から読んでいきゴミタプルのID(タプルID)を記録します。 テーブルを最後まで読み切る or 貯めたゴミタプルの量がmaintenance_work_memを超えたら次のフェ

                  • 学び
                  • 2020/06/01 20:51
                  • 2ndQuadrantにJoinしました

                    21 users

                    masahikosawada.github.io

                    7年半勤めたNTTデータを退職し、11月1日から2ndQuadrantで働いています。 データベースを全く触ったことがない状態で配属されてから、NTTデータで4年、NTT OSSセンタで3年半、PostgreSQLを中心に色々な経験をさせていただきとても楽しかったです。本当に感謝しています。 2ndQuadrantという会社を初めて聞く方も多いと思います。2ndQuadrantはイギリスにある企業で、PostgreSQLを中心としてサービスを展開しています。24x365サポートやRemote DBA等のサービスを提供しながら、PostgreSQL関連ツールの作成(pglogical、Postgres-BDR1)や、PostgreSQL本体の開発もとても積極的に行っている企業です。現在PostgreSQLのコミッタは29人いるのですが、その内5人が2ndQuadrantに所属しており、「最も

                    • テクノロジー
                    • 2019/11/05 08:39
                    • oss
                    • 転職
                    • あとで読む
                    • サービス
                    • 開発
                    • 企業
                    • PostgreSQLのリカバリ周りのバグを修正してみた - 問題発見編 -

                      3 users

                      masahikosawada.github.io

                      バグの発見 原因解析 - RECOVERYHISTORYファイルとはなにか?- RECOVERYHITORYファイルのその後は? まとめ 本バグの影響は? 私自身PostgreSQL本体の開発やバグ修正を何度か行っているのですが、最近リカバリ機能周りで面白いバグを修正したので、バグの発見から原因の特定、修正まで実際に行ったことを紹介しようと思います。これからPostgreSQLに貢献していきたい、開発を始めたいという方に参考になると嬉しいです。 本バグはすでに修正されているため、再現したい方は9.5.19以前、9.6.15以前、10.10以前、11.5以前のどれかを使うか、開発用ブランチを使う場合は、コミットdf86e52cace2c413よりも古いコードを利用してください 本記事ではPostgreSQLの開発用ブランチ(materブランチ)を使用しています。PostgreSQLのソースコ

                      • テクノロジー
                      • 2019/10/17 17:19
                      • ロジカルレプリケーションのレプリケーション衝突を解決する

                        3 users

                        masahikosawada.github.io

                        ざっくりまとめると、 PostgreSQLのロジカルレプリケーションでレプリケーション衝突が起こった場合、衝突が(手動で)回避されるまでスタンバイでの反映が止まる 衝突を回避するための一つの方法として、pg_replication_origin_advance()関数を使って衝突の原因となるWAL(を送信する事)をスキップできるけど、スキップ先のLSNを指定するので他の必要なデータもスキップしてしまうかもしれないよ ということ。 レプリケーション衝突というのは、データの受信側(Subscriber)でのデータを適用と、テーブル内のデータや受信側で実行中の変更内容が衝突する事を指しています。 試してみる 実施にやってみる。まずは、テーブルを作成して、ロジカルレプリケーションを開始。 -- 上流側(Publisher) =# CREATE TABLE test (c int primary k

                        • テクノロジー
                        • 2019/09/17 23:49
                        • PostgreSQL
                        • PostgreSQLは20年間どのようにfsyncを間違って使っていたか - 聴講メモ -

                          420 users

                          masahikosawada.github.io

                          TL;DR 聴講メモ Intro into durability PostgreSQLのCHECKPIONT CHECKPOINT中にエラーが発生したら? fsyncへの2つの間違った期待 なぜ今になって問題が明らかになってきた? そもそもなぜBufferd I/Oなのか? どうやって直すかか 参考リンク 質疑 最後に 先日PostgreSQLの新しいマイナーバージョンがリリースされました。このマイナーリリースでメインとなる修正は「fsync周りのバグ修正」で、このバグは間違ったfsyncに対する間違った認識から約20年間存在してたバグということで注目されていました。 このバグについてPostgreSQLのコミッタ(Tomas Vondra氏)が解説しているセッションが、先々週開催されたFOSDEM 2019でありました。私もFOSDEM 2019に参加していたのですがその際は裏セッション

                          • テクノロジー
                          • 2019/02/17 14:17
                          • postgresql
                          • あとで読む
                          • db
                          • database
                          • kernel
                          • Linux
                          • filesystem
                          • バグ
                          • unix
                          • cache
                          • Parallel Queryの概要

                            6 users

                            masahikosawada.github.io

                            パラレルクエリの目的 EXPLAIN(実行計画)の見方 対応している操作 9.6 10 11 対応していない操作 読み込み専用 参考資料 PostgreSQLでは、バージョン9.6からパラレルクエリが利用可能です。Oracle、DB2でもパラレルクエリは実装されていますが、PostgreSQLのパラレルクエリはどのような特徴があるのでしょうか。簡単にパラレルクエリの概要を紹介します。 パラレルクエリの目的 パラレルクエリは、複数のCPUを使ってクエリを並列(Parallel)に処理する機能です。そのため、クエリの実行時間の短縮が期待できます。並行(Concurrent)とは異なるので注意。 EXPLAIN(実行計画)の見方 パラレルクエリが使われた場合の実行計画の読み方は注意が必要です。 まずは、パラレルクエリOFFの実行計画(ANALYZE, VERBOSE)。 =# explain (

                            • テクノロジー
                            • 2019/02/14 09:34
                            • PostgreSQL
                            • あとで読む
                            • トランザクションIDへのロックと行ロック

                              48 users

                              masahikosawada.github.io

                              TL;DR PostgreSQLのロックマネージャ 行ロック 行ロック待ち トランザクションIDへのロック トランザクション完了の順番待ち まとめ 参考 PostgreSQLが持つpg_lockシステムビューを使うと、PostgreSQLのロックマネージャが管理している情報を見ることができ、誰がどのようなオブジェクトに対し、どの種類のロックを取得しているのか、または取得できずに待っているのかを確認することができます。 PostgreSQLはロック対象のオブジェクトとして、テーブル、インデックス、行(タプル)やトランザクションIDがあります。実はトランザクションIDへのロックはPostgreSQLでは多用していて、pg_locksビューやサーバログでトランザクションID(やトランザクション)に対してExclusiveLockやShareLockの取得は見たことがある人も多いのではと思います。

                              • テクノロジー
                              • 2018/09/04 08:47
                              • postgresql
                              • トランザクション
                              • database
                              • ロック
                              • DB
                              • Pocket
                              • あとで読む
                              • DeadlockとDeadLock対策のメモ

                                4 users

                                masahikosawada.github.io

                                Deadlockの必要条件(Coffman conditions) Deadlock対策 Deadlock Prevention Wait-die, Wound-wait、No-wait Wait-Die Wound-Wait No-wait Deadlock Avoidance Deadlock Detection 参考 簡単に調べたのでメモ。「Deadlockとは?」は色んなところで解説されているのでここでは割愛。 Deadlockの必要条件(Coffman conditions) Mutual Exclusion 一度に1つのプロセスのみがリソースを使用できる Hold and Wait なにか一つのリソースを保持したまま他のリソースを待つ No preemption リソースの横取りができない Circular wait リソースの保持待ちが循環している。あるP1がP2によって保持

                                • テクノロジー
                                • 2018/09/01 17:27
                                • 設計
                                • Window関数のフレームを極める

                                  10 users

                                  masahikosawada.github.io

                                  モードの種類 UBOUNDED PRECEDING, UNBOUNDED FOLLOWING CURRNET ROW ROWSモード RANGE, GROUPSモード offset PRECEDING and offset FOLLOWING ROWSモード GROUPSモード RANGEモード まとめ lang: jp Window関数のパーティションはPARTITION BY句で指定するだけなのですが、フレームについては色々モードやオプションがあり細かく指定できます。 フレーム指定は一見難しそうに見えますが、一回理解すると自由自在にWindow関数が使えるようになると思います。MySQL 8.0でもWindow関数が導入されてますます利用頻度が増えた今、少し時間はかかるかもしれませんが、ちゃんと理解しておくと便利です。 Window関数のシンタックスは以下のようになっています。1 2

                                  • テクノロジー
                                  • 2018/07/07 10:53
                                  • postgresql
                                  • DB
                                  • mysql
                                  • Window関数の基本

                                    4 users

                                    masahikosawada.github.io

                                    Window関数とは? Window関数の考え方 パーティション分割をする(PARTITION BY句) フレーム境界を指定する まとめ lang: jp 最近久しぶりにWindow関数を詳しく見てみたので、何回かに分けて解説しようと思います。以降、PostgreSQLを例にして解説しますが、PostgreSQLのWindow関数はSQL標準に対応している部分が多いので、他のDBMSでも同じよう使える部分が多いと思います。 Window関数とは? Wikipediaより、 SQL において、窓関数もしくはウィンドウ関数 (英: window function) は結果セットを部分的に切り出した領域に集約関数を適用できる、拡張された SELECT ステートメントである。 一見GROUP BY句に似ていますが、Window関数はあくまでも関数なので返却される行数には影響しません。 テーブルの状

                                    • テクノロジー
                                    • 2018/07/05 22:35
                                    • PostgreSQL
                                    • PostgreSQL 11で導入されたVacuumの2つの改善

                                      4 users

                                      masahikosawada.github.io

                                      一つ目: Update the free space map during vacuum (Claudio Freire) 二つ目: Allow vacuum to avoid unnecesary index scans (Masahiko Sawada, Alexander Korotkov) PGConに向う途中です。 搭乗まで時間があるので、先日リリースされたPostgreSQL 11でVacuum機能の改善がいくつかあったのでその中から2つ紹介します。 一つ目: Update the free space map during vacuum (Claudio Freire) Vacuum中にFree Space Map(FSM)が更新されるようになりました。(Claudio Freire) これまでVacuum(FULLオプションなし)では、Vacuumの実行完了後にFSMを更新

                                      • テクノロジー
                                      • 2018/05/28 18:20
                                      • よく使うpsqlの便利技10選

                                        270 users

                                        masahikosawada.github.io

                                        1. メタコマンドとSQLを一緒に使う 実行例 2. SELECT結果の値だけを取得する 実行例 3. SQLでSQLを作り実行 (9.6~) 実行例 4. サーバに応じて実行するSQLを変える (10~) 実行例 5. 忘れたDDLのシンタックスを確認する 実行例 6. SQLファイルの内容を一行ずつ確認しながら実行する 実行例 7. 特定のコマンドを定期的に実行したい 実行例 8. psqlを起動した時に実行されるコマンドを設定する 実行例 9. .psqlrcを一時的に使わない 実行例 10. SELECTの結果をCSV形式で出力 実行例 普段よく使っているpsqlで便利だと思う使い方を10個紹介します。運用で使うシェルスクリプトとかでもpsqlは使う事があると思うので、psql派でない人にも多少は役に立つはず。 特に最近のバージョンで追加された機能は、利用できるバージョンを記載して

                                        • テクノロジー
                                        • 2018/03/17 08:22
                                        • PostgreSQL
                                        • psql
                                        • sql
                                        • あとで読む
                                        • DB
                                        • postgres
                                        • シェルスクリプト
                                        • tips
                                        • Replication Originとは

                                          3 users

                                          masahikosawada.github.io

                                          Replicaiton Originの目的は? 「1. Logical Replicationの時に、レプリケーションの進捗を追跡する」について 「2. レプリケーションされた情報がローカル発生したのか、リモートから発生したのかを区別する」について PostgreSQLのLogical Replicationはいくつかのコンポーネントから実現されていており、その一つが Replication Origin です。PostgreSQLの日本語マニュアルだとReplication Originは「レプリケーション起点」と訳されていますが、名前だけみてもあまりぱっとイメージが付かなくて気になったので、少し調べた結果をまとめます。 Replicaiton Originの目的は? Replication OriginはPostgreSQLのLogical Replicationでのみ使用される機能で

                                          • テクノロジー
                                          • 2018/03/14 12:41
                                          • PostgreSQL
                                          • あとで読む
                                          • MasahikoSawada

                                            5 users

                                            masahikosawada.github.io

                                            UUIDv7はRFC 9562で定義されました。UUIDには8つのバージョンがあり、どれもサイズは128ビットですが、格納するデータがそれぞれバージョンで異なります。私もUUIDv7を知るまでは、UUIDといえばランダムデータのイメージでしたが、それはバージョン4のUUIDで、本記事で紹介するバージョン7のUUID(UUIDv7)はタイムスタンプをデータの先頭に持つためソート可能であるのが大きな特徴です。

                                            • テクノロジー
                                            • 2018/03/14 12:40
                                            • あとで読む

                                            このページはまだ
                                            ブックマークされていません

                                            このページを最初にブックマークしてみませんか?

                                            『MasahikoSawada』の新着エントリーを見る

                                            キーボードショートカット一覧

                                            j次のブックマーク

                                            k前のブックマーク

                                            lあとで読む

                                            eコメント一覧を開く

                                            oページを開く

                                            はてなブックマーク

                                            • 総合
                                            • 一般
                                            • 世の中
                                            • 政治と経済
                                            • 暮らし
                                            • 学び
                                            • テクノロジー
                                            • エンタメ
                                            • アニメとゲーム
                                            • おもしろ
                                            • アプリ・拡張機能
                                            • 開発ブログ
                                            • ヘルプ
                                            • お問い合わせ
                                            • ガイドライン
                                            • 利用規約
                                            • プライバシーポリシー
                                            • 利用者情報の外部送信について
                                            • ガイドライン
                                            • 利用規約
                                            • プライバシーポリシー
                                            • 利用者情報の外部送信について

                                            公式Twitter

                                            • 公式アカウント
                                            • ホットエントリー

                                            はてなのサービス

                                            • はてなブログ
                                            • はてなブログPro
                                            • 人力検索はてな
                                            • はてなブログ タグ
                                            • はてなニュース
                                            • ソレドコ
                                            • App Storeからダウンロード
                                            • Google Playで手に入れよう
                                            Copyright © 2005-2025 Hatena. All Rights Reserved.
                                            設定を変更しましたx