(データベース: Oracle 10G R2)
100,000 レコードをテーブルに挿入するのに 1 分かかります。ただし、テーブルに既にいくつかのレコード (400K) が含まれている場合は、4 分 12 秒かかります。また、CPU 待機が急増し、「Free Buffer Waits」が非常に高くなります (dbconsole から)。
ここで何が起こっているか知っていますか?これは、テーブルのエクステントが頻繁に発生するためですか? これらのテーブルのエクステント サイズは 1,048,576 バイトです。DB がテーブル ストレージを拡張しようとしているような気がします。
私はこれについて本当に混乱しています。だから、どんな助けも素晴らしいでしょう!
これは挿入ステートメントです。
始める for i in 1 .. 100000 ループ 顧客に挿入 (id、ビジネス名、住所 1、 住所2、都市、 郵便番号、州、国、ファックス、 電話、メール ) 値 (customer_seq.nextval、dbms_random.string ('A'、20)、dbms_random.string ('A'、20)、 dbms_random.string ('A', 20), dbms_random.string ('A', 20), trunc (dbms_random.value (10000, 99999)), 'CA', 'US', '798-779-7987', 「798-779-7987」、「asdfasf@asfasf.com」 ); ループを終了します。 終わり;
ここでのdstat出力 (CPU、IO、MEMORY、NET):
- 空のテーブルの挿入: http://pastebin.com/f40f50dbb
- 400K レコードのテーブル: http://pastebin.com/f48d8ebc7
からの出力v$buffer_pool_statistics
ID: 3 名前: デフォルト ブロックサイズ: 8192 SET_MSIZE: 4446 CNUM_REPL: 4446 CNUM_WRITE: 0 CNUM_SET: 4446 BUF_GOT: 1407656 SUM_WRITE: 1244533 SUM_SCAN: 0 FREE_BUFFER_WAIT: 93314 WRITE_COMPLETE_WAIT: 832 BUFFER_BUSY_WAIT: 788 FREE_BUFFER_INSPECTED: 2141883 DIRTY_BUFFERS_INSPECTED: 1030570 DB_BLOCK_CHANGE: 44445969 DB_BLOCK_GETS: 44866836 CONSISTENT_GETS: 8195371 PHYSICAL_READS: 930646 PHYSICAL_WRITES: 1244533
アップデート
このテーブルからインデックスを削除したところ、100K を 600K レコード テーブルに挿入してもパフォーマンスが大幅に向上しました (CPU 待機なしで 47 秒かかりました - dstat の出力http://pastebin.com/fbaccb10を参照)。