[pgsql-jp: 26635] Re: トランザクション中の select文でエラーが発生した場合

Yasuo Ohgaki yohgaki @ ohgaki.net
2002年 7月 9日 (火) 20:05:24 JST


大垣です。

Tatsuo Ishii wrote:
>>見てみました。8192毎のログを書くようになっていて、こちらが
>>大きなオーバーヘッドですね。CPUを沢山積んでいるSMPマシンの
>>ではログを書いている間のロック時間が長いようなので、同時実行
>>性を損ないそうですがあまり関係ないかも知れません。
> 
> 
> 「SMPの場合はロック時間が長い」っていうのはどの辺で決まっているんでし
> たっけ?よかったら教えてください.

「沢山CPUをもつSMPマシンの場合、CPUが待たされた合計時間が
長くなる」と書き方にするべきでした。。。

n個プロセッサがあり、同じロックを取得を同時に試みた場合(n-1)
のプロセッサが待たなければならないのでSMP場合はCPUが待たされた
時間の合計が多くなると言う事です。

実際には大量にINSERTを同時実行しても、複数のプロセッサが同じタ
イミングで同じクリティカルセクションを実行する、と言う事はあま
りないのでCPUの数が多くないと、パフォーマンスロスはあまり感じら
れないと思います。

以下は石井さん向けではない、蛇足です。

疑似マルチタスク環境でもプロセス間でロックの競合が起きるとパ
フォーマンスが落ちますが、大量のINSERTだけ行なうと言う仮定
ではOID取得のオーバーヘッドはSMPマシンの方が影響は大きいと
考えられます。

しかし、大量のインサートばかり発生する、と言う状況はログDB
として利用するなどの限定された環境と思いますから、現実的な
用途(SELECTがほとんど、INSERTは少しと言う環境)ではそれ
ほど気にしなくても良いと思います。

インサート時にはOIDが無い方が実行するコードが少ない+OIDの
取得にはクリティカルセクションの実行が必要なのは確かなので、
たとえベンチマークで判らなくても早いとは言えますが、、、

# 最近のPCは十分早いですから1CPUでも違いがわかるか、
# 試してみると面白い結果がでるかも知れません。

--
Yasuo Ohgaki





pgsql-jp メーリングリストの案内