Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybse ASE, как понять, какой запрос лучше? / 10 сообщений из 10, страница 1 из 1
20.02.2008, 14:33
    #35144568
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
Есть stored procedure с двумя параметрами: min message id, max message id.
Для заданного диапазона она выводит какие-то данные.

Обнаружилось, что если min = max, процедура минут 20 тупит прежде, чем выдать пустой резалт сет.

Попробовал прописать hint (index message_index). Для min = max всё стало летать.
Теперь хочется сравнить, насколько ухудшилась работа для других случаев.
Сделал set statistics io on (как в мануале учили :)) и смотрю:

с индексом
W (4): Table: my_table_1 scan count 1, logical reads: (regular=1624863 apf=0 total=1624863), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
W (5): Table: my_table_2 scan count 1, logical reads: (regular=2961 apf=0 total=2961), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
W (6): Table: Worktable1 scan count 28969, logical reads: (regular=93902 apf=0 total=93902), physical reads: (regular=0 apf=0 total=0), apf IOs used=0


без индекса
W (4): Table: my_table_1 scan count 5048, logical reads: (regular=327051 apf=0 total=327051), physical reads: (regular=0 apf=0 total=0), apf IOs used=0
W (5): Table: my_table_2 scan count 1, logical reads: (regular=2961 apf=0 total=2961), physical reads: (regular=0 apf=0 total=0), apf IOs used=0


Лишнии logical reads это очень страшно?
Замер с секундомером даёт не очень внятные результаты. Интересно представить какая будет разница в производительности сервера, если эта процедура будет часто "дёргаться".

И где в гугль хранится сокральная информация на тему перфоманса?
...
Рейтинг: 0 / 0
20.02.2008, 18:07
    #35145456
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
Я бы не стал использовать хинт в процедурах. Он может улучшить производительность для текущего состояния данных, но что будет, скажем, через полгода кол-во данных радикально поменяется?


Лучше попытаться понять почему без хинта индекс не используется.
Будет ли подобная проблема если вы запустите просто запрос.
Сравните планы запросов для для min != max и для min = max (сравните кол-во Total I/O и какие индексы выбираются или не выбираются)

Попробуйте посмотреть план процедуры set fmtonly on без хинта и с хинтом для min != max и для min = max.

В отношении зависания на 20 минут - я не знаю сколько записей в вашей таблице, но если нет проблем с блокировками, то либо записей должно быть быть очень много, либо у вас может быть просто битый индекс.
Попробуйте обновить статистику и перестроить индекс. Если не поможет попробуйте reorg with rebuild. Он вам перестроит страницы данных и индексов и обновит все статистики.

Думаю, что поможет.

Желаю удачи.
...
Рейтинг: 0 / 0
20.02.2008, 19:06
    #35145638
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
NotGonnaGetUs пишет:
> Лишнии logical reads это очень страшно?

Страшно. Если большое.

> Замер с секундомером даёт не очень внятные результаты. Интересно
> представить какая будет разница в производительности сервера, если эта
> процедура будет часто "дёргаться".

Вы IO мерийте, а не секунды. Logical IO.

а лучше - пошлите запрос с планом (без вашего хинта).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2008, 11:21
    #35146688
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
Рапортую.

Сейчас убрал все хинты. Проверил план - получается тот же самый, что с моим хинтом.
Порадовался.
Почему вчера без хинта получалась абы что - не знаю. Может быть кто-то потихому перебилдил индексы...


MasterZiv:
> Вы IO мерийте, а не секунды. Logical IO.

Глупый вопрос: а как? set statistics io on - это не то?
...
Рейтинг: 0 / 0
21.02.2008, 11:26
    #35146717
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
Kru
В отношении зависания на 20 минут - я не знаю сколько записей в вашей таблице, но если нет проблем с блокировками, то либо записей должно быть быть очень много, либо у вас может быть просто битый индекс.


Процедура состоит из трёх последовательных селектов (без изяществ в виде временных таблиц, т.е. всё просто). Селекты простые, join двух таблиц.
Самый большой join для таблиц размером 90 087 415 и 1 123 496 строк. Это достаточно много?
...
Рейтинг: 0 / 0
21.02.2008, 15:19
    #35147914
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
NotGonnaGetUs пишет:

> Глупый вопрос: а как? set statistics io on - это не то?

То, именно то.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2008, 15:21
    #35147920
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
NotGonnaGetUs пишет:

> Процедура состоит из трёх последовательных селектов (без изяществ в виде
> временных таблиц, т.е. всё просто). Селекты простые, join двух таблиц.
> Самый большой join для таблиц размером 90 087 415 и 1 123 496 строк. Это
> достаточно много?

Вы гараж-то откройте ... тьфу, запросы-то покажите...
Даже самый простой запрос может очень долго выполняться, и даже уложить сервер.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2008, 16:42
    #35148323
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
MasterZiv
Вы гараж-то откройте ... тьфу, запросы-то покажите...
Даже самый простой запрос может очень долго выполняться, и даже уложить сервер.

Это один из трёх селектов. Остальные почти такие же.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	SELECT
		log.channel_id ChannelId,
		log.channel_seq_no ChannelSeqNo,
		log.unique_id UniqueId,
		log.seqnumber SeqNumber,
		log.attr_key AttrKey,
		log.message_id MessageId 
	FROM
		order_state os,
		log_attribute log 
	WHERE
		log.attr_type = 'X' AND
		log.message_id >= @StartMessageId AND
		log.message_id <= @EndMessageId AND
		log.unique_id = os.unique_id AND
		os.active = 'Y' 

log_attribute есть индекс по message_id и парочка других.
на order_state индекс по паре unique_id и active.


Между селектами стоят проверки на ошибки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	BEGIN
		SELECT @xxrows = @@rowcount, @xxerr = @@error 
		EXEC @xxerr = errorcheck @xxproc_name,  106 ,	@xxerr 
		if (@xxerr <  0 ) 
			BEGIN
				SELECT @xxbuffer='A Stored Procedure has returned: ' + CONVERT(VARCHAR( 10 ), @xxerr) 
				EXEC reporterror  21100 , @xxproc_name, @xxbuffer 
			END
	END

reporterror кладёт ошибку в отдельную табличку.


Вчера наблюдал, как процедура выполняется больше часа. Почему - не понял. В Aqua Data Studio не нашёл где посмотреть кто/кого/почему ждёт.
Чем лучше мониторить ase?
...
Рейтинг: 0 / 0
21.02.2008, 19:45
    #35148940
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
NotGonnaGetUs пишет:
> Это один из трёх селектов. Остальные почти такие же.

"почти такие же" значит - "другие".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2008, 19:49
    #35148947
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybse ASE, как понять, какой запрос лучше?
NotGonnaGetUs пишет:
> Вчера наблюдал, как процедура выполняется больше часа. Почему - не
> понял. В Aqua Data Studio не нашёл где посмотреть кто/кого/почему ждёт.

А план ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybse ASE, как понять, какой запрос лучше? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]