Tuesday, September 28, 2010

тюнили, тюнили, вытюнили...

Есть запрос для проверки прав доступа, время выполнения:

было cpu=0.000145s, elapsed=0.000168s
стало cpu=0.000135s, elapsed=0.000155s
в среднем 14.1 buffer gets

думаю улучить время-на-CPU до 0.000125-0.000127s [0.125ms]. Выполняется он почти сто миллионов раз за время восьмичасового стресс теста, смысл тюнить был. :) Интересно улучшать производительность, чтобы работало так, что и глазом не успел моргнуть!

2 comments:

Fred[dy] said...

Вов, а что время не зависит от объёма данных? Или он фиксированный?

Vladimir Begun said...

Это расчет прав доступа, в принципе, в среднем объем данных для пользователя лимитирован (14.1 buffer gets -- это, грубо, сколько блоков/страниц базы будет тронуто, это не означает поднято с диска, почти все уже в кэше).

Т.е. (кто, что хочет посмотреть) -> результат. Проблема в том, что "что хочет посмотреть" это часть иерархии. Ну например предприятие->организация->дом пользователя->папка. Вот чтобы посмотреть есть ли у пользователя доступ к файлу нужно посмотреть на все элементы иерархии, может оказаться так что кто-то какие-то из прав отобрал, скажем запись. Плюс, пользователь может иметь роли, или авторизироваться как vova#protocol. Глубина вложенности, обычно :-), разумная, но есть лимит -- 90.

Вот сейчас тест закончился 96,849,618 выполнений, elapsed 15,143.47s, cpu 13,081.30s т.е. среднее время elapsed 0.000156s, cpu 0.000135s.

Хочется чтобы все конечно быстро работало. Для нашей системы у меня критерий простой: вызовы обычно, не должны занимать больше чем 0.1-0.25 секунды, иначе нужно смотреть и разбираться. Это может быть и нормально, но надо знать почему столько и что нужно сделать чтобы стало лучше :-)