5/30 (土)
[PostgreSQL] PostgreSQLアンカンファレンス@東京
旅行前の段階ではキャンセル待ちだったがPostgreSQLアンカンファレンス@東京だが、途中で繰り上がって参加可能になったようなので出席。
- PostgreSQL の GROUP BY、ORDER BY には 1, 2 という番号が使える
- PostgreSQL 9.5 で GROUP BY GROUPING SETS、GROUP BY CUBE、GROUP BY ROLLUP が使える。
- PostgreSQL 9.4.2 はレプリカ構成を組んだ時に、データディレクトリに書き込み不能なファイルがあると、正常終了をしなかった次回の起動時にクラッシュリカバリ処理が走ると途中でエラーでこけるというバグがあるらしい。9.4.3 で解決する。
- XID 周回防止問題の回避のために XID の freeze 処理が行われるが、これが性能的にばかにならない。 通常の VACUUM では各テーブルの中で FREEZE されていない最小の XID (pg_class.relfrozenxid) が更新できないので FULL VACUUM が必要になる? 運用を考えると CLOG の拡大を許すなら autovacuum_freeze_max_age、autovacuum_multixact_freeze_max_age は大きい値を設定する方がよい。
- pg_bulkload
5/28 (木)
ローマ出張5日目
帰省です。 トラステヴェレ駅からフィウミチーノ空港へ向かいます。
駅に到着したので車両をじっくり見てみます。
フィウミチーノ空港に着きました。 到着した時は深夜だったのでよくわからなかったのですが、結構広い空港ですね。
ブリティッシュ・エアウェイで再びロンドン・ヒースローへ。 フィウミチーノ空港側でトラブルがあったのか1時間近く遅延し、ヒースロー空港では思いっきりあせることに。
29日(金)になって日本到着。 無事返ってきたぉ。
5/27 (水)
ローマ出張4日目
今日は本格的に観光に行くよ。
カリメロの絵のついたトラックが走る。 カリメログッズは他も見たよ。
フィウミチーノ空港からトラステヴェレ駅までは Trenitalia Rail Services という会社が運行している謂わば幹線だが、ローマ市内は ATAC という会社が地下鉄とトラムとバスを運用している。 ATAC は地下鉄・トラム・バス全てに乗れる1日券や3日券などを売っているので、これを買うのが便利らしい。 1日券は Biglietto Integrato Giornaliero(BIG) という。 ただしトラステヴェレ駅は Trenitalia の路線で駅舎で、この切符は売ってない。 駅近くのタバコ屋で買う。 7 ユーロだった。
8 番線のトラムでナヴォーナ広場(Piazza Navona)へ向かう。 Piazza と Pizza は間違いやすい。
ナヴォーナ広場から歩いてパンテオン神殿へ。 すぐです。
パンテオン神殿以外にもローマのいたるところにオベリスクが建っております。 ラテン語で書かれた碑文を読むことはできませんので、何の目的で建てたのか分かりませんが近くに観光案内があることが多いので助かります。
さらに歩いてトレヴィの泉ですが、ここは大改修でした。 ただ高架の通路が組まれており観光客はここを通って泉にコインを投げ込むことができるようです。 ただ通路へ入れるのは 10 時からのようで、大量の観光客が開店を待っていました。 私はそんなの待ってられないので次に行きます。
スペイン広場です。 トレヴィの泉からは歩きますが、中国人ツアーがいたのでメンバーの振りをして着いて行きます。
ここにもオベリスクが |
一階に窓のある建物にはしっかりした鉄格子が掛っています |
|
ここがスペイン階段。階段の上にある教会のような建物は改修中で広告が掛っています |
||
坂の上から見下ろします。 |
パラポラアンテナは白色が多いですが、観光地では景観に溶け込む様に建物と同じ茶色のアンテナを見ました。 |
スペイン広場の下にある地下鉄駅からコロッセオへ移動します。 地下鉄は A 線と B 線があります。
エレベータ。ローマではエレベータは極めて少ない。 |
電車内には電光掲示板があり次の駅が表示されます。車内放送はなし。 |
路線図もあります。 |
みなとみらい線のプラットフォームみたい。 |
電車はモダンアートが施されています。 |
コロッセオ駅に着きました。 |
ネロが建設した黄金宮殿を見に行くも改修中。 外側から劇場の跡だけ見てすごすご帰ります。
パラティーノの丘という遺跡が建ち並ぶ丘陵部。 入場チケットは12ユーロです。 ただし同じチケットでコロッセオにも入れるので高くはない。 入場にあたり手荷物検査が行われます。
ちなみに私の前の客は 20 ユーロ札でチケットを買おうとして、釣りがないと断られそうになっていました(クレジットカードで払えたのですが)。 観光地なのに釣りの準備がいい加減のようです。
遺跡のある丘は北側にさらに高台があります。 そこに登ると遺跡を見下ろすことができます。 絶景かな絶景かな。
パラティーノの丘は入口から出ることもできません。 入口近くの出口はコロッセオにつながっていて、観光客がなぜかこちらにやってきます(入り口はないのに)。 こっちには出口のみっと看板立てておけばいいのに。 ファラオのミイラ棺が建っていますが、そういうコスプレをした物乞いだったようです。
コロッセオに入ります。
雨の中、バチカン市国を目指そうと地下鉄に乗るが、残念ながら雨脚は強くなる。 バチカンの最寄り駅に着いたが、外に出られず断念した。 駅の近くに何人かよく分からない人がビニールに首と手が出る穴をあけただけのレインコートを売っている。 4 ユーロぐらいだが、値切ると 2 ユーロぐらいになるようだ。
トラム事情
トラムに乗って帰ろうとするが、17時頃になると通勤ラッシュがはじまるようで、トラムがまともに進まない。 なんぼか歩いた方が速いぐらいだ。
地下鉄は大丈夫だったが、トラムの電光掲示板は宇宙人からのメッセージを受信中のものが多い。
イタリアは自動車が右側通行だが、トラムの複線は中央分離帯の片側によっている。 外側のトラム軌道は自動車の同じ方向だが、内側のトラム軌道は逆方向に進む。 自動車は外側の軌道のみならず内側の軌道にも平気で入ってくるので、見ている分には非常に怖い。
5/26 (火)
ローマ出張3日目
ローマの町並みで目についた物の写真を載せてみる。
ローマは道路沿いにある大きなゴミ箱に生活ゴミを捨てるようになっている。 これはレッカー車のような大きな回収車がやってきて、ばっかと捨ててゆくようだ。 たまにゴミ箱の中をのぞいて使えるものがないか見てカートに回収してゆく人もいる。
ローマ人は電話が好きなようで歩きながら携帯電話を使っている人をよく見かける。 ハンズフリーの人も多い。 公衆電話もまだ残っていて、それなりに使われているようだ。
ローマのあちこちで水を出しっぱなしにした水道を見かける。 噴水のかわりなのかしら?
1ブロックに最低一つは BAR(バーじゃなくてバールというらしい)がある。 ローマ人は朝飯・昼飯はこういうバールで食べている人が多いようだ。 それぞれ個人商店のようで、 喫茶店とパン屋が合体したようなお店で、焼いて切り分けたピザとかを売っている。 夜にはパブになるバールもある。
すでに閉まっているが、小さな小屋が建ち並ぶこのエリアは市場である。 市場が開いている時間はさまざまな食品を売っていて、ローマ人はこういうところで自宅で食べるものを買うのが伝統的だったそうな。
スーパーもある。 これは CONAD というチェーン。 魚屋がないことをのぞけば日本とだいたい一緒。 レジはベルトコンベア式になっている。
有料トイレ。 どうもローマは観光客が行けるようなトイレが少ない。 トイレの位置には要注意だ。
ローマの交差点。 ローマ人信号が赤でも行けると思ったらずんずん渡ってしまう。
EV カーが結構多い。 20 台に 1 台ぐらいは EV カーじゃないかしらん。
ポテト屋さんのソースの味に Samurai というのがあるが辛いらしい。
その他に街でみかけたもの。
本日のよく分からないもの
ホテルのバスのトイレの隣にあるこれはなんだろう?
これがビデらしい。
5/25 (月)
ローマ出張2日目
眼が覚める。 朝のうちにホテルの周囲を眺めて観る。
外を散策してみる。 ローマは鉄道網が発達していないためか、完全な自動車社会。 道路が駐車場となっているようで、一列に並んでいる。 そのせいか車道の端は危ないので自転車に乗っている人はほとんどいない。 たまに見かける人は車道の中央を走っている。
ローマはアパートメントが立ち並んでいる。 自治体が建てたのか企業が建てたのかはよく分からないが、ローマの人のほとんどがこういうアパートに住んでいるようだ。 場所によってはゲートがあり関係者以外立ち入り禁止になっている。
昨日ついた駅まで行ってみる。
ホテルの近くには名高いテヴェレ川が流れている。 名前の由来の通り濁っている。
通りの歩いているとみかけたお洒落な建物。 学校かしらん?
ホテルの近くにガイウス・ケスティウスのピラミッドという遺跡。
カラカラ帝の大浴場跡まで来て観たが、この遺跡は月曜日の午後は閉館だそうだ。
寿司屋があったよ。
5/24 (日)
ローマ出張1日目
ローマで開催される学会に出席するために海外出張。 羽田空港(HND)→ロンドン・ヒースロー空港(LHR)→ローマ・フィウミチーノ空港(FCO)で移動。
ヒースロー空港に到着。
ローマ空港に到着したのは現時刻で22時を回っていた。 終電間際の電車に乗る。 ちなみに駅の改札は入場方向にバリアはなく、切符を買ってこの打刻器に自分で通す。
最寄り駅のローマ・トラステヴェレ駅に到着。
日が替わるか替わらないかという時刻にホテルに到着。
5/16 (土)
USB 接続 外付グラフィックアダプター HDMI 対応モデル USB-RGB3/H
支給のノートパソコンは VGA の口しか付いていないので、HDMI 対応プロジェクターに投影用に外付グラフィックアダプターを物色。 川崎のヨドバシで I/O DATA の USB-RGB3/H を購入。
[Food] インビスハライコ@六本木
オクトーバフェストによく出展しているインビスハライコがドイツソーセージの食べ放題をやっているので行ってみる。 あいにくの小雨なのに数人の先客が並んでおり、30分程度待たされることになる。
食べ放題のメニューを選ぶとお通しと 13 種類のソーセージが食べられるが、飲み物やソーセージ以外は別途注文が必要。 こちらとらアルコールは一切飲まないので、プレッツェルとアイスティーを注文したら、ソーセージを食べることに専念する。
お通し |
プレッツェルは塩味が薄い |
|
ザワークラフト(煮込みソーセージ「コールヴルスト」入り) |
左からウィンナーソーセージ シンケン クラカワ シンケンヴルシェン ミュンヘナー(ヴァイストヴルスト) |
左からグルーベブラートソーセージ ホットドックヴルシェン(だったような気がする) ケーゼウィンナー(チーズ入り) カリーソーセージ |
ちなみに私が食べたカリーソーセージと食べなかったリーズン・カリー・ヴォーストの2種類があり、両方ともカリーケチャップで食べるが、前者はターメリックがソーセージに練りこんであるが、後者は普通のソーセージらしい。 ドイツで普通にカリーソーセージというと後者を指すのだそうだ。
5/12 (火)
シェルスクリプトでエラーが出たら止める方法
Bash 系シェルスクリプト内で複数のコマンドを連続で呼び出す時に、各コマンド終了後はエラー番号をチェックして必要に応じて exit
すべきだが、それが面倒な時はコマンドが正常終了しなかった場合にはスクリプト全体を終了させるという set -e
を指定すればよいようだ。
set -e
並列ベンチマークのシェルスクリプトがまともに動くようになった。
5/9 (土)
[Movie] ホーンズ 容疑者と告白の角
ハリー・ポッターのダニエル・ラドクリフの主演作品。 チネチッタで観るが、小さいシアターだということもあったが、久しぶりにほぼ満席の状態になる。
ストーリは怪奇ミステリー。 とはいえ犯人はすぐ推理できるのでミステリー部分はおまけみたいなもの。 主人公たちの少年時代のフラッシュバックと悪魔の角の能力で明かされる事件と直接関係ない告白の面白さがメイン。
それでもやはりラドクリフだとハリー・ポッターの影響が強くて、途中蛇が主人公の周りに集まってきたシーンではパーセルマウスがはじまるのではとドキドキした。
5/7 (木)
[PostgreSQL] DBT3 実行中にシステム時間が増大
PostgreSQL 9.4 ベースの並列クエリー実装を DBT3 の計測を行っていると妙にシステム時間が延びることに気づいた。 システムは 128 GB 構成で、PostgreSQL のインスタンスの shared_buffers は 48 GB に設定している。 この構成で各クエリーを 3 回計測しているので、DBT3 のワークセットは全てメモリに載った状態でベンチマークできるはず。 そのためベンチマーク中にシステム時間が増えるのはおかしい。
原因を探っていると 2 つ原因があることが分かった。
- ページフォルトが大きい。ページフォルトは 48 GB の DB バッファで発生している。
lseek()
の呼び出し回数が多い。複数のプロセスが同一のファイルに対してlseek()
を掛けるとカーネル内でスピンロックが発生する。
ページフォルトの発生し過ぎ
PostgreSQL はマルチスレッドではなくマルチプロセスモデルなので、postmaster から fork してバックエンドプロセスやワーカープロセスを作成する。 この際にプロセスのページテーブルをコピーするがこれは Copy-on-Write(CoW) なので、fork したプロセスが新しいページにアクセスする度にページテーブルの CoW を促すためのページフォルトが起きたようだ。 これを防ぐには transparent huge page でない hugetlbfs が必要になる。 4KB のページが 2MB のラージページになればページテーブルの書き換え回数が大幅に減るので、それに伴ってページフォルトも激減するはずである。
hugepagefs を使うには Linux カーネルの起動時に確保する hugepage の枚数を明示的に指定する必要がある。 この値は postgresql.conf の中で shared_buffers で指定した量を 10% 程度増やしたサイズを計算し、それを huge page のサイズ(x86-64 なら 2MB で割った値を指定する。 ここでは shared_buffers に指定した 48 GB に対して、約 60 GB の hugepage が確保できるように 30000 とする。
# echo 30000 > /proc/sys/vm/nr_hugepages
PostgreSQL が共有メモリを hugetlbfs から採るためには postgresql.conf の huge_pages を指定する。 これはデフォルトでは try、つまり上の /proc/sys/vm/nr_hugepages を設定し hugetlbfs が利用可能なら使い、失敗すれば通常通りのメモリ確保を行うというモードである。
しかし RHEL 6.3 で PostgreSQL をビルドすると hugetlbfs が使えない。 これは GLIBC の中に MAP_HUGETLB がまだ定義されていないからのようだ。
これはビルド時に強制的に MAP_HUGETLB を指定すると使えるようになる。
./configure --prefix=<install-directory> CFLAGS='-O2 -D MAP_HUGETLB=0x40000'
また postgresql.conf の huge_pages を on に指定すると、 hugetlbfs が利用可能でない場合にはエラーで終了するようになるので、hugetlbfs を利用したかどうかが分かり易い。
hugetlbfs を導入すると、幾つかのシステム時間は大幅に改善した。
lseek の呼ばれすぎ
2. の後者の lseek()
が大きいのは RelationGetNumberOfBlocks
が頻繁に呼ばれるのが問題だ。
PostgreSQL の SeqSacn、IndexScan、IndexOnlyScan、BitmapHeapScan などは、各プランの初期化処理 ExecInitXXX()
の中で initscan()
を呼び出す。
initscan()
の中ではリレーションが何ブロック持っているのを調べるために RelationGetNumberOfBlocks
を呼ぶが、その中で SET_SEND を指定して lseek
が呼ばれ、リレーションを構成するファイルのブロック数を調べるのだ。
この処理はクエリー内で 1 回しか呼ばれないのでこれでよい。
しかし SeqSacn、IndexScan、IndexOnlyScan、BitmapHeapScan などに re-scan が掛り、ExecReScanXXX()
が呼び出された場合も、その中で initscan()
が呼び出される。
この流れで再度、RelationGetNumberOfBlocks
が呼ばれ、lseek()
が実行されるようだ。
前回の initscan()
からの間にリレーションに新しいタプルが挿入されブロック数が変わるということはあるが、それは稀なパターンでメモリ上に前回のブロック数と前回の調査からの間にブロック数の変化があったかどうかのフラグを設ければ、lseek()
で確認するような大仰な処理は不要である。
しかし PostgreSQL はマルチプロセスで、プロセス間を跨った形で、どのファイルがどのプロセスからアクセスされたかを記録していないため、ブロック数の変更を簡単に知ることができない。
そのため毎回 lseek()
を使うという安直な手段に出ているようである。
Nested Loop の内周側に IndexScan、IndexOnlyScan、BitmapHeapScan が来ると、re-scan が度々掛ることになる。
その場合、lseek
の呼び出しが絶えずシステム時間が増大するようだ。
正しい修正とは思えないが、src/backend/access/heap/heapam.c を以下のように書き換えると、幾つかのクエリーでシステム時間が減少した。
static void initscan(HeapScanDesc scan, ScanKey key, bool is_rescan) { bool allow_strat; bool allow_sync; /* * Determine the number of blocks we have to scan. * * It is sufficient to do this once at scan start, since any tuples added * while the scan is in progress will be invisible to my snapshot anyway. * (That is not true when using a non-MVCC snapshot. However, we couldn't * guarantee to return tuples added after scan start anyway, since they * might go into pages we already scanned. To guarantee consistent * results for a non-MVCC snapshot, the caller must hold some higher-level * lock that ensures the interesting tuple(s) won't change.) */ - scan->rs_nblocks = RelationGetNumberOfBlocks(scan->rs_rd); + if (!is_rescan) + scan->rs_nblocks = RelationGetNumberOfBlocks(scan->rs_rd);
hugetlbfs の導入と initscan()
のハックを行うと、DBT3 クエリーのシステム時間はほとんど削除できる。
5/5 (火)
鳥獣戯画展@上野 国立東京博物館
果敢にも鳥獣戯画─京都 高山寺の至宝─を観に行く。 幸い野外は20分待ち程度だった。 平成館に入場後、高山寺の展示物は自由に観られるのだが、肝心の鳥獣戯画は館内でかなり待つことになる。 その後、鳥獣戯画の甲巻を除く乙丙丁を観るのに30分、その後の甲巻を観るのにさらに110分待ちという状況だった。 甲巻を観る列に並ぶのに耐えられず途中で抜けて出てしまった。
大アマゾン展@上野 国立科学博物館
梯子して科学博物館でやっている大アマゾン展を見る。
アマゾン川流域のいろいろな現生生物、古代生物の化石・標本が並ぶ。
サルの仲間 |
ネズミの仲間 |
アリクイ |
アリクイ |
ナマケモノ ナマケモノが一生懸命アマゾン川を泳ぐビデオも展示されていた |
アルマジロ |
ビバ(左)とベルツノガエル(右) |
なんか毒のあるカエル |
アナコンダの骨格標本 |
マイマイ |
ブルーカンディル |
キノコの説明 |
国立科学博物館にある注意書きだがペット(昆虫類を含む)を連れての入館はご遠慮下さい
とある。
「昆虫類」とわざわざ追加するのが国立科学博物館ぽい。
5/4 (月)
大英博物館展―100のモノが語る世界の歴史@上野 東京都美術館
大英博物館のように自前で展示できない収蔵品を巡回展の形で貸し出しているようだ。 私の日記が残っている範囲でも2003年の大英博物館の至宝展、2011年の大英博物館 古代ギリシャ展 THE BODY 2011 究極の身体、完全なる美、2014年の大英博物館 古代エジプト展といろいろ展示されている。
今回は上野の東京都美術館で「大英博物館展―100のモノが語る世界の歴史」が開催されたので鑑賞する。 客が空く会期の中頃なのと、本日は上野動物園が無料日なのと、大人気の鳥獣戯画展に客を吸われたのか、ゴールデンウィークのだというのに 15 分程度並ぶだけで見ることができた。 館内は混んでいるが、客が多すぎて展示品を見ることができないというわけではない。
コンセプトが2003年の大英博物館の至宝展と被っていたせいか、以前来たルイス島のチェス駒を再び見ることになる。 ウルのスタンダードは3回目だ。
初見の展示品ではミトラ教の牡牛供犠の像が良かった。 大理石でできた彫刻だけど、牡牛の喉に短剣を刺している男は完全にローマ風。 ローマ人はミトラ教をこんな風に受容していたんだね。
[Food] 肉の万世@秋葉原
肉の万世の地下1階には中華料理店があったのだが、1階の飲み屋みたいなカウンターでパーコー麺だけ提供するようになったようだ。 久しぶりに食べてみるがスープを吸ったパーコーがひどくくどく感じた。 年を食ったのか?それとも事前に雲林坊の四川麻婆豆腐を食べたせいか?
5/3 (日)
[Food] ポメロスプロースト@代官山
フライドポテト専門店制覇の第二弾、ベルギーポテトが食べられるフードスタンド POMMES PROST(Facebook、食べログ、ぐるなび)に来る。 代官山駅で降りた後はあまりのお洒落な街オーラーを浴びて場違いっぷりにたじたじになるが、がんばってお店のある場所まで前進する。
ポテトはソースを選択できる。 ベジタブルソースを頼んだが、ポテト自身のサクサク感とタルタル風ソースがポテトにあって非常に旨い。
ボッティチェリとルネサンス フィレンツェの富と美
渋谷 Bunkamura の Bunkamura ザ・ミュージアムで開催中のボッティチェリとルネサンスを観に行く。 ボッティチェリは前半生はメディチ家特にロレンツォ・デ・メディチの庇護を受け全盛を誇ったが、フィレンツェからメディチ家が追放され画家の活動する場が縮小し、晩年にはサヴォナローラ傾倒し作風が変わり人気が急落したそうだ。 ルネサンスは政治的に激動の時代でもあるのね。
フィレンツェの守護聖人は洗礼者ヨハネだけあって、聖母子画などにヨセフを差し置いてヨハネが登場する。
[Food] いきなり!ステーキ@渋谷桜丘店
晩御飯に「いきなり!ステーキ」に行く。 渋谷の「いきなり!ステーキ」は2軒あるが渋谷桜丘店の方。
5/2 (土)
[Food] ロブソンフライズ@下北沢
連休初日に駒込公園でやっている肉フェスまで出かけてみたがあまりに人が多かったので退散。 そこで都内のフライドポテト専門店の制覇に乗り出す。 下北沢のロブソンフライズというカナディアンスタイルのフライドポテトのお店に行って見る。
カナダのフライドポテトはプーティン(Poutine)というそうな。 ポテトの上にハラペーニョ・マッシュルーム・ミートボールなどを載せるらしい。
焼きバナナのベーコン巻は珍味で美味しかった。 でもポテトにグレイビーソースを掛けるのは好きでないということに気づいてしまった。
卓上スタンドがついに壊れる
大学に上京する時から使っていたパナソニックの卓上スタンドがついに壊れた。 就寝前に本を読んだりするために使っていたのだが、寝ぼけ眼で踏んづけたら白熱灯との接続部分が壊れたよ。
川崎のヨドバシで LED の電気スタンドを購入。 前のスタンドは白熱灯を交換して 20 年持たせることができたけど、この製品の寿命は 10 年持つだろうか?
[Movie] シンデレラ
川崎まででたのでチネチッタに。 ハイサイ祭というのをやっていて凄い人の出である。 角煮を食べる。
「シンデレラ」を観る。 FROZEN(アナと雪の女王)のミニアニメが付く。
このところディズニーは『Alice In Wonderland』、『オズ はじまりの戦い』、『マレフェセント』と古典的なメルヘェンの改変版を続けていたが、このシンデレラは驚くほど原作に忠実だ。 何があったんだ?