アカウント名:
パスワード:
他のDBを推している人からすれば「vacuumなんて作業が必要になること自体に問題がある」と言われそうですが、
MySQLのInnoDBエンジンでも、更新・削除・追加を繰り返していると性能が落ちますね。 そういうときは、OPTIMIZE TABLEを行うことになりますが、これはたんにテーブルを作り直しているだけです。:)
そのうちauto vacuum的な物が入るのかもしれません。
vacuumというデメリットを抱えても、MVCCというメリットがそれを上回る価値がある、と考えたからでしょ。
MVCCのような追記型により読み/書きのロック競合をなくすというのはTime Domain Processingと呼ばれます。単純上書き型が採用するロックテーブルの管理方式とは大きく異なる革新的なもので、Gray本ではPostgreSQLの前身であるPOSTGRESはこれを意識して実装された、と紹介されています。
元々のポイントは、おそらくロールバックを単純化するためなのではないかと思います。ロールバックセグメントや上書き方式だと、undoログから更新してしまった領域を書き戻すというかなり面倒な一手間がかかります。
個人的にはこの種の専門的で複雑なロジックから解放されていたことが、PostgreSQLが当初オープンソースで細々と開発を続けることが出来た理由の一つかもしれないな、と思っています。いきなり現状のOracleのような高度なソフトウェアをオープンソースで公開して放り投げられても、おそらく誰もメンテナンスできないでしょうから:)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
MySQLでもvacuum必要 (スコア:3, 参考になる)
MySQLのInnoDBエンジンでも、更新・削除・追加を繰り返していると性能が落ちますね。
そういうときは、OPTIMIZE TABLEを行うことになりますが、これはたんにテーブルを作り直しているだけです。:)
そのうちauto vacuum的な物が入るのかもしれません。
Re: (スコア:0)
テーブルを作成しなおしてexpしたデータをimpしなおす事もやってたし
24h運用に致命的でなきゃvacuumもあってもいいかな。
#最近Oracle使う仕事は他人に振ったので最近の事情は知らない
Re: (スコア:4, 参考になる)
PostgreSQL はマルチバージョニング(トランザクション開始時点の状態のデータにアクセスするための機構)を
実現するために
「内部では更新の度に新規レコードを作っている」
のです。そしてこれを解放する必要が生じするのです。(約2億レコードに達する前に?)
ですから、
「Vacuum に相当する機構を行わないOracle」というものは
「ロールバックセグメントがいつまでも膨れ続けるOracle」
と考えればいいのではないでしょうか?
MySQL のことはわかりません。
# 勘違いだったらやなので AC
マクロの基本は検索置換(by y.mikome)
Re: (スコア:0)
>「Vacuum に相当する機構を行わないOracle」というものは
>「ロールバックセグメントがいつまでも膨れ続けるOracle」
>と考えればいいのではないでしょうか?
想像しただけでゾッとする・・・。
「内部では更新の度に新規レコードを作っている」の仕様を決めたのは誰だよ。
Re: (スコア:1)
「誰だよ」とか言うほどのものかな?
その上で、デメリットを縮小する努力を継続してしているわけで。
Re:MySQLでもvacuum必要 (スコア:2, 参考になる)
MVCCのような追記型により読み/書きのロック競合をなくすというのはTime Domain Processingと呼ばれます。単純上書き型が採用するロックテーブルの管理方式とは大きく異なる革新的なもので、Gray本ではPostgreSQLの前身であるPOSTGRESはこれを意識して実装された、と紹介されています。
元々のポイントは、おそらくロールバックを単純化するためなのではないかと思います。ロールバックセグメントや上書き方式だと、undoログから更新してしまった領域を書き戻すというかなり面倒な一手間がかかります。
個人的にはこの種の専門的で複雑なロジックから解放されていたことが、PostgreSQLが当初オープンソースで細々と開発を続けることが出来た理由の一つかもしれないな、と思っています。いきなり現状のOracleのような高度なソフトウェアをオープンソースで公開して放り投げられても、おそらく誰もメンテナンスできないでしょうから:)