Доброго времени суток!

Khorsun Vlad пишет:
   fetches, reads, *writes*


Вот данные для 2.1.1 CS, FW ON

Скрипт 1

Start Transaction: consistency
no_auto_undo

ExecSQL:
  update Test_table1
  set data1 = data1 || '111'
  where data1 > '0'
PLAN (TEST_TABLE1 INDEX (TEST_TABLE1_DATA1))
-----Statistics-----
Reads = 13344
Writes = 20646
Fetches = 12031944
Marks = 3534188
CurrentMemory = 1547480
MaxMemory = 1899588
NumBuffers = 75
Execute time = 47485
-----Detail statistics-----
read_idx_count
TEST_TABLE1                     = 1000000
update_count
TEST_TABLE1                     = 1000000
-----End------

Commit Transaction

Start Transaction: consistency
no_auto_undo

ExecSQL:
select Count(*) from test_table1
PLAN (TEST_TABLE1 NATURAL)
-----Statistics-----
Reads = 19595
Writes = 18665
Fetches = 12095115
Marks = 3008930
CurrentMemory = 1191616
MaxMemory = 1899588
NumBuffers = 75
Execute time = 31000
-----Detail statistics-----
purge_count
TEST_TABLE1                     = 1000000
read_seq_count
TEST_TABLE1                     = 1000000
-----End------

Commit Transaction

Start Transaction: consistency
no_auto_undo

ExecSQL:
  update Test_table1
  set data1 = data1 || '111'
  where data1 > '0'
PLAN (TEST_TABLE1 INDEX (TEST_TABLE1_DATA1))
-----Statistics-----
Reads = 29800
Writes = 28399
Fetches = 15328674
Marks = 5162189
CurrentMemory = 1549144
MaxMemory = 1904704
NumBuffers = 75
Execute time = 58469
-----Detail statistics-----
read_idx_count
TEST_TABLE1                     = 1000000
update_count
TEST_TABLE1                     = 1000000
-----End------

Commit Transaction




Скрипт 2


Start Transaction: consistency
no_auto_undo

ExecSQL:
  update Test_table1
  set data1 = data1 || '111'
  where data1 > '0'
PLAN (TEST_TABLE1 INDEX (TEST_TABLE1_DATA1))
-----Statistics-----
Reads = 13344
Writes = 20646
Fetches = 12031944
Marks = 3534188
CurrentMemory = 1547480
MaxMemory = 1899588
NumBuffers = 75
Execute time = 47422
-----Detail statistics-----
read_idx_count
TEST_TABLE1                     = 1000000
update_count
TEST_TABLE1                     = 1000000
-----End------

Commit Transaction

Start Transaction: consistency
no_auto_undo

ExecSQL:
  update Test_table1
  set data1 = data1 || '111'
  where data1 > '0'
PLAN (TEST_TABLE1 INDEX (TEST_TABLE1_DATA1))
-----Statistics-----
Reads = 22075
Writes = 471167
Fetches = 22286748
Marks = 6616967
CurrentMemory = 1547816
MaxMemory = 1903656
NumBuffers = 75
Execute time = 242422
-----Detail statistics-----
purge_count
TEST_TABLE1                     = 1000000
read_idx_count
TEST_TABLE1                     = 1000000
update_count
TEST_TABLE1                     = 1000000
-----End------

Commit Transaction

Ясное дело, что во втором случае writes на порядок больше,
но почему так получается? Update медленнее собирает мусор, чем Select?

--
С уважением, Евгений

Ответить