(База данных: Oracle 10G R2)Вставки 4x медленнее, если таблица имеет много записей (400K) в сравнении, если он пустой
занимает 1 минуту, чтобы вставить 100000 записей в таблицу. Но если таблица уже содержит некоторые записи (400K), то это занимает 4 минуты и 12 секунд; также CPU-wait вскакивает вверх и «Free Buffer Waits» становится очень высоким (с dbconsole).
Знаете ли вы, что здесь происходит? Это из-за частых табличных экстентов? Размер экстента для этих таблиц составляет 1 048 576 байт. У меня такое чувство, что DB пытается расширить хранилище таблиц.
Я действительно смущен об этом. Так что любая помощь была бы замечательной!
Это вставка заявление:
begin for i in 1 .. 100000 loop insert into customer (id, business_name, address1, address2, city, zip, state, country, fax, phone, email ) values (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', '[email protected]' ); end loop; end;
Здесь dstat выход (ЦП, ввода-вывода, память, нетто):
- пустой таблицы вставок: http://pastebin.com/f40f50dbb
- Таблица с 400K записей: http://pastebin.com/f48d8ebc7
Выход из v$buffer_pool_statistics
ID: 3 NAME: DEFAULT BLOCK_SIZE: 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
UPDATE
Я уронил индексы от этой таблицы и производительность значительно улучшилась, даже при вставке 100K в 600K таблицы записей (которые приняло 47 секунд без ожидания процессора - см. Вывод dstat http://pastebin.com/fbaccb10).
Вы правы. Я проверил эту теорию, сбросив индексы, и теперь я не вижу CPU Wait. Посмотрите мое последнее обновление в описании, которое содержит более подробную информацию. –