Feb. 15th, 2012

obartunov: (Default)
Прогнал тесты сегодня на 9.2dev и сравнил результаты gist vs spgist. Данные сгенерены так:
select p.x, p.y into points  from 
( select  (0.5-random())*180 as x, random()*360 as y 
       from ( select generate_series(1,$NROWS) ) as t ) as p;


Краткий вывод такой, что spgist заметно быстрее gist до кол-ва записей 10млн, несмотря на бОльшее количество прочитанных блоков (в spgist процессору надо сильно меньше работать, чем для gist). Остается непонятной, почему spgist так не любит упорядоченные данные - кол-во блоков просто гигантское ! Для 15 млн записей spgist уже начинает проигрывать и связано это с каким-то аномальным количеством прочитанных блоков.

Разницy в количестве найденных записей Саша Коротков объяснил, надеюсь он поправит это. Дело в том, что в spgist происходит тупое сравнение координат, а в gist даже для листьев вызывается функция box_contained, которая сравнивает боксы с точностью до 10^-6, что и вызывает небольшое расхождение.

Время создания индексов gist и spgist не сильно отличается, так как gist значительно ускорился благодаря работе Саши Короткова. На прошлом pgcon в Канаде я показывал, что разница в скорости построения индекса достигала 2-3 раз в пользу spgist.

Надо будет еще прогнать тесты на реальных данных, ибо опыт показывает, что синтетические данные с равномерным распределением не очень хорошо отражают действительность.

test=# select testname, nrows, (endtime-begintime) as runtime, blks_accessed, totalrowsmatched from results order by nrows,testname;
         testname          |  nrows   |     runtime     | blks_accessed | totalrowsmatched 
---------------------------+----------+-----------------+---------------+------------------
 points ordered buffered   |    10000 | 00:00:00.128679 |        137324 |            40000
 points ordered spgist     |    10000 | 00:00:00.077355 |        229459 |            40000
 points unordered buffered |    10000 | 00:00:00.104902 |        136363 |            40000
 points unordered spgist   |    10000 | 00:00:00.078142 |        215500 |            40000
 points ordered buffered   |  1000000 | 00:00:24.090863 |        359825 |          4000004
 points ordered spgist     |  1000000 | 00:00:06.218287 |       4461765 |          4000000
 points unordered buffered |  1000000 | 00:00:07.345433 |        341337 |          4000004
 points unordered spgist   |  1000000 | 00:00:05.962986 |        693722 |          4000000
 points ordered buffered   | 10000000 | 00:03:32.921534 |       1082246 |         40000062
 points ordered spgist     | 10000000 | 00:01:32.837746 |      38326778 |         40000000
 points unordered buffered | 10000000 | 00:02:27.810558 |        981158 |         40000062
 points unordered spgist   | 10000000 | 00:01:23.498076 |       2195123 |         40000000
 points ordered buffered   | 15000000 | 00:05:14.415563 |       1386540 |         60000098
 points ordered spgist     | 15000000 | 00:05:54.343944 |      58132360 |         59999998
 points unordered buffered | 15000000 | 00:03:43.682043 |       1239613 |         60000098
 points unordered spgist   | 15000000 | 00:04:34.943515 |       2692225 |         60000000

Profile

obartunov: (Default)
obartunov

November 2012

S M T W T F S
    1 23
456789 10
11121314151617
18192021222324
252627282930 

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags