Разное время выполения

sergq
Дата: 27.07.2012 22:04:26
Здравствуйте.

Есть запрос.
И процедура, в которую обернут запрос.

Статистика выполнения запроса


Query Time
------------------------------------------------
Prepare : 0,00 ms
Execute : 374,00 ms
Avg fetch time: 13,85 ms

Memory
------------------------------------------------
Current: 35 096 212
Max : 54 102 708
Buffers: 2 048

Operations
------------------------------------------------
Read : 0
Writes : 0
Fetches: 116 804
Marks : 0


Статистика выполнения процедуры


Query Time
------------------------------------------------
Prepare : 16,00 ms
Execute : 2 293,00 ms
Avg fetch time: 84,93 ms

Memory
------------------------------------------------
Current: 34 838 264
Max : 48 566 076
Buffers: 2 048

Operations
------------------------------------------------
Read : 458
Writes : 0
Fetches: 119 243
Marks : 0


По чтениям таблиц статистика и там и там идентична.

Единственное заметил.
Делаешь реконект в эксперте. запускаешь процедуру. отрабатывает за то же время что и запрос. Делаешь в эксперте коммит транзакции. выполнеяешь процедуру снова - те же 2 секунды.

Кто чудит?

Спасибо
Гаджимурадов Рустам
Дата: 27.07.2012 22:15:48

Запускай и то, и другое с FetchALL и сравнивай.

Posted via ActualForum NNTP Server 1.5

sergq
Дата: 27.07.2012 22:16:33
Гаджимурадов Рустам,

все именно с FetchALL
Гаджимурадов Рустам
Дата: 27.07.2012 23:13:39

Чушь какая-то. FetchAll должен быть
быстрее второй раз, а не медленеее.
О каких объемах данных идёт речь?

Posted via ActualForum NNTP Server 1.5

sergq
Дата: 28.07.2012 12:11:43
Гаджимурадов Рустам,

максимальное чтение одной из таблиц 24000. результат 20 записей)
sergq
Дата: 28.07.2012 12:15:45
Гаджимурадов Рустам,

максимальное чтение одной из таблиц 24000. результат 20 записей)
kdv
Дата: 28.07.2012 14:26:37
sergq,

не верю. либо вы сравниваете разное, либо у вас в запросе или процедуре есть что-то "лишнее" или "отличающееся", либо в разных базах все это, и т.п.
sergq
Дата: 28.07.2012 15:52:42
kdv,

Вот попробовал так же другой запрос и его же обернутого в SP

у запроса execute time 15ms

а у процедуры при первом выполнении в рамках транзакции 1.5 сек, а при повторном выполнении в той же транзакции - близкое к 0 милисекунд). если выполнить ту же процедуру в новой транзакции - все те же 1.5 секунды.
По статистике - чтение 30 таблиц (максимально из одной 159 чтений - мизер)
Гаджимурадов Рустам
Дата: 28.07.2012 16:28:11

Либо вранье/троллинг, либо человек не понимает, что такое FetchAll.

Posted via ActualForum NNTP Server 1.5

kdv
Дата: 28.07.2012 16:48:29
Гаджимурадов Рустам,

ага. ну и еще "опять 1.5 сек в другой транзакции" - тоже никак. в другом коннекте, если классик - да. Но судя по Buffers: 2 048 речь о суперсервере, а значит, такого не может быть. Или путаница между транзакциями и коннектами.

sergq - если ты выполнил запрос в суперсервере, в любом коннекте, и не отсоединяясь, делаешь тот же запрос в этом коннекте или в другом, то данные, считанные в первый раз, уже находятся в кэше, и не может быть "опять 1.5 сек". Более того, есть кэш винды, поэтому запрос может выполняться 3 "разных времени"
1. при первом коннекте после загрузки компа
2. при коннект/дисконнект/коннект
3. повторно в том же коннекте

И разница будет зависеть от размера базы, размера кэша ФБ, и "влезли" все прочитанные страницы в кэш, или нет.

Наконец, почему тебе говорят про FetchAll. Твой запрос, когда ты его выполняешь "отдельно", вне процедуры, скорее всего выбирает несколько записей (сколько влезает в грид), и останавливается. Поэтому время выполнения 15мс. В процедуре же, также скорее всего, т.к. мы не видим кода, запрос выбирает ВСЕ записи, поэтому время выполнения 1.5 секунд.
Если ты сравниваешь запрос и процедуру, то тебе надо в IBExpert жать на кнопочку FetchAll (два зеленых треугольника) в обоих случаях.