「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2581
現在:4


Base + MySQL(又はPostgreSQL)における扱いRecord数について

ページOpenOffice.org FAQの登録ページ
投稿者new_OOo3
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-02-23 19:05:33 (水)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

お世話になります。 現在、MS-ACCESS2003にて約700,000RecordのTable Dataを扱っております。
当初から「MS-ACCESSの限界以上では?」と恐る恐る扱っていたのですが、ついに
「ファイルの共有ロック数が制限を超えています(Error3052)」
のError Messageが表示されてしまいました。
元Dataの分割も試みましたが比較検証を行う為、最低500,000Record以下には出来ないと判断しております。
そこで、MS-ACCESS => Base + MySQL(又はPostgreSQL)への変更を検討しております。
当初はMS-ACCESS + MySQL(又はPostgreSQL)も考えましたが、MSサポートのHP見解に

****** [ MicroSoft Support On Lineからの抜粋 ] *******
参考URL : http://support.microsoft.com/kb/815281/ja
[エラー原因]
このエラーは、トランザクションを実行するために必要なロックの数が、ファイルごとの最大ロック数を超えた場合に発生します。
[詳細]
MaxLocksPerFile の設定により、Microsoft Jet でファイルに対して設定する最大ロック数が決まります。デフォルトの MaxLocksPerFile 値は、9,500 です。ただし、Novell NetWare サーバーで作業している場合は、この値を変更しないでください。それは、サーバーの接続ごとの最大レコード ロック数が 10,000 のためです。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
305995  Novell Server 上の Jet データベースに接続するとエラー "3050 ファイルをロックできませんでした" が発生する
*********************************************************

と記されており、最大ロック数のDefaultが「9,500」では無理と考えて諦めました。
そこで、MySQL(又はPostgreSQL)にて処理を行う事を考えております。また、複数(約10)のSQLにて比較検証する為、Baseを用いてOpenOffice.org BasicにてSQLを連続で実行させたいと考えております。
つきましては、以下の項目についてご教示頂けます様お願いします。

1) Baseにおいも「MS-ACCESSの最大ロック数」制限に相当する制限がありますか?
2) 上記1)にてある場合、Default値を分かればご教示下さい。
3) Local PCにRDBMS(MySQL又はPostreSQL)をInstall予定ですが個人的にお薦めのRDBMSがあればご教示下さい。
4) RDBMS(MySQL又はPostreSQL)の推奨書籍 or サイトがあればご紹介下さい。
5) その他気付き点等がありましたら、アドバイスを頂けます様お願いします。

ハードウェアとしては
CPU : 詳細は不明ですが、Coleron D 500系程度
HDD : 50GBの空き
Memory : 2GB
のLocal環境で行いたいと考えておりますが、必要ならばPCの変更も検討する予定ですが、Databaseシステムを構築するのでは無くDataの検証が目的ですので今あるSourceで出来るだけ行いたいと考えております。

宜しくご回答を頂けます様お願いします。


DBのロック数

M.Kamataki (2011-02-24 01:09:08 (木))

Baseの場合は、利用するデータベース次第だと思います。したがって、1)、2)についてはMySQL、PostgreSQLの最大値を調べることになります。

検索結果ですが、MySQLの場合、引っかかったのは以下のページ。

http://dev.mysql.com/doc/refman/4.1/ja/show-variables.html

「bdb_max_lock BDB テーブルで有効にできるロックの最大数(デフォルトでは 10,000)。長いトランザクションを実行しているときや、mysqld が大量のレコードを使ってクエリを実行しているときに、bdb: Lock table is out of available locks または Got error 12 from ... というエラーが発生する場合には、この数値を大きくする必要がある。」という記述があります。これはBDBテーブルの場合ですね。MySQLはいろんなテーブル形式(ストレージエンジン)が選べるので一概には言えません。またMySQL 5.xではBDBテーブルは使われないかも。

同じく検索結果でPostgreSQLで引っかかったのは以下のページ。

http://www.postgresql.jp/document/pg820doc/html/runtime-config-locks.html

「デフォルトの64は、経験的に十分であると証明されていますが、単一のトランザクションで数多くの異なるテーブルをいじるクライアントがいる場合、この値を大きくする必要があるかも知れません。」という記述があります。

なんとなくロック数というのは、データベースの構造、実行するSQLにも左右されそうな気がします。

4)はMySQLなら、以下のページ。

http://www.mysql.gr.jp/

PostgreSQLは以下のページ。

http://www.postgresql.jp/

もし、検索結果ではなくずばりと回答いただける方がいらっしゃれば歓迎します。

ご教示ありがとうございます。

new_OOo3 (2011-02-27 22:35:59 (日))

M.Kamataki

非常に丁寧にご教示頂きましてありがとうございます。
ご教示頂きましたサイト等を参照してRDBMSについて一歩づつ勉強していきたいと思います。

お名前:
題名: