|
Скорость чтения при Index Scan и Seq Scan
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые специалисты! Прошу помочь разобраться с двумя вопросами. Значит имеется Postgresql 9.6 CPU I7 16Гб ОЗУ обычный диск 1 Тб Тестовая база создана утилитой pgbench с параметром -s равным 2000 В тестовых целях выполняется два запроса. Запрос первый: explain (analyze, buffers, timing) select aid, count(*) from public.pgbench_accounts group by aid План запроса ниже GroupAggregate (cost=0.57..8193532.57 rows=200000000 width=12) (actual time=23.969..63151.347 rows=200000000 loops=1) Group Key: aid Buffers: shared hit=101 read=546452 I/O Timings: read=10276.165 -> Index Only Scan using pgbench_accounts_pkey on pgbench_accounts (cost=0.57..5193532.57 rows=200000000 width=4) (actual time=23.962..23192.594 rows=200000000 loops=1) Heap Fetches: 0 Buffers: shared hit=101 read=546452 I/O Timings: read=10276.165 Planning time: 10.919 ms Execution time: 68511.093 ms Скорость чтения по IOTOP составила примерно 71-72МБ/с. Хотя если взять (546452 * 8) / 10 / 1024 получиться 426 МБ/с Второй запрос: explain (analyze, buffers, timing) select abalance, count(*) from public.pgbench_accounts group by abalance План запроса: HashAggregate (cost=6278689.00..6278689.01 rows=1 width=12) (actual time=152545.057..152545.057 rows=1 loops=1) Group Key: abalance Buffers: shared read=3278689 I/O Timings: read=111095.229 -> Seq Scan on pgbench_accounts (cost=0.00..5278689.00 rows=200000000 width=4) (actual time=34.025..122496.127 rows=200000000 loops=1) Buffers: shared read=3278689 I/O Timings: read=111095.229 Planning time: 30.275 ms Execution time: 152545.370 ms Скорость чтения по IOTOP составила примерно 184 МБ/с. Хотя если взять (3278689 * 8) / 111 / 1024 получиться 230 МБ/с Скриншоты с данными IOTOP могу приложить. Скажите пожалуйста: 1. Почему по IOTOP скорость чтения индекса сильно меньше скорости чтения таблицы? 2. Почему скорости подсчитанные по данным explain превышают физическую скорость которую может дать диск? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2017, 16:51 |
|
Скорость чтения при Index Scan и Seq Scan
|
|||
---|---|---|---|
#18+
mgurnitskiy, 1. Индекс – это дерево, страницы которого обходятся в логическом порядке, который может не совпадаеть с порядком данных на диске. При sequential scan'е файл таблицы чистается последовательно, что даёт меньше физических seek'ов диска. 2. Вы вот тут авторХотя если взять (546452 * 8) / 10 / 1024 получиться 426 МБ/с забыли на время поделить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2017, 18:14 |
|
Скорость чтения при Index Scan и Seq Scan
|
|||
---|---|---|---|
#18+
mgurnitskiy, 2) попробуйте очистить кэш ОС (drop_caches) перед выполнением запроса и повторить тест. read не означает что данные обязательно читались с диска, а то, что их не было в shared_buffers. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2017, 08:09 |
|
Скорость чтения при Index Scan и Seq Scan
|
|||
---|---|---|---|
#18+
smagen, ну как же, а деление на 10? 10 - это секунды. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2017, 10:27 |
|
|
start [/forum/topic.php?fid=53&fpage=76&tid=1996616]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 348ms |
total: | 463ms |
0 / 0 |