Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
XIDを周回させてみよう
Search
ISHIDA Akio
August 09, 2011
Programming
23
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
XIDを周回させてみよう
ISHIDA Akio
August 09, 2011
More Decks by ISHIDA Akio
See All by ISHIDA Akio
SQLを実行したときに、PostgreSQLはどのようにデータにアクセスしているのか
iakio
0
300
Prophecyを使った ユニットテスト
iakio
0
15
phpspecで学ぶLondon School TDD
iakio
0
9
PostgreSQLの範囲型と排他制約
iakio
0
27
使いこなそうGUC
iakio
0
9
Other Decks in Programming
See All in Programming
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
ジョジョの世界をXRで再現する
mofurune
0
170
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Railsバージョンを4倍にした話
optim
0
430
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
610
Kotlinの15年とServer-Side Kotlin
n_takehata
1
150
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Performance Optimization With LLMs
xleitix
0
110
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
160
JIS keyboard support in Omarchy
lef237
0
120
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
440
Designing for Timeless Needs
cassininazir
1
530
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Done Done
chrislema
187
17k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Visualization
eitanlees
153
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
Transcript
XIDを 周回させてみよう 2011-08-09 PostgreSQL勉強会@札幌 @iakio
今日の話 • PostgreSQLを長期間運用していると、突然有るはずの データが見えなくなってしまうという、XIDの周回問題と呼 ばれる現象があるらしい • でも滅多にお目にかかれません • じゃあ無理矢理にでもやってみよう
トランザクションIDとは INSERT INTO r(i) VALUES(1); INSERT INTO r(i) VALUES(2); INSERT
INTO r(i) VALUES(3); SELECT xmin, xmax, i FROM r; xmin xmax i 664 0 1 665 0 2 666 0 3
トランザクションIDとは INSERT INTO r(i) VALUES(1); INSERT INTO r(i) VALUES(2); INSERT
INTO r(i) VALUES(3); SELECT xmin, xmax, i FROM r; DELETE FROM r WHERE i = 1; UPDATE r SET i = 4 WHERE i = 2; xmin xmax i 664 667 1 665 668 2 666 0 3 668 0 4
古い 新しい • XIDは32bit(40億) • T1に対してT2が新しいか 古いかは、T2-T1で決ま る • XIDを20億ちょい進める
と、新旧が逆転する
• なので、現在のXIDを例えば30億ほど進めれば、いきなり 見えてたものが見えなくなります • でもそんなのはつまらないですよね • 見えなくなる瞬間を見たい。が、それにはいくつかの壁
XIDの周回を防止する仕組み1 • 0から2は特殊なXID • 2がFrozenXIDと呼ばれ、どのXIDよりも古いとみなされる • 十分に古いXIDをFrozenXIDに置き換えることで、XIDの周 回を防止する • autovacuumがOFFでも実行される
XIDの周回を防止する仕組み1 • 前回のFreezeからXIDが2億進んだら (autovacuum_freeze_max_age) • 5千万より前のXIDをFrozenXIDにおきかえる (vacuum_freeze_min_age) • どこまで凍結したかをpg_class.relfrozenxidに記録する 2億
5千万 2億 5千万
XIDの周回を防止する仕組み2 • 残り1000万トランザクションで警告 • 残り100万トランザクションでエラーとなり、新しいトラン ザクションを受け入れなくなる(standalone modeで起動し なおしてvacuumを行う必要がある)
これがXIDを周回させる方法だ • データベースを停止 • pg_resetxlogでXIDを2^31に進める • pg_resetxlog -x 0x80000000 •
standaloneモードで起動し、pg_database.datfrozenxidと pg_class.relfrozenxidを2^31に進める • データベースを起動 • ちまちまXIDを消費(SELECT txid_current())
参考 • PostgreSQLドキュメント 「23.1.4. トランザクションIDの周回エラーの防止」 http://www.postgresql.jp/document/current/html/routine-vacuu