powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Примерное время запроса
22 сообщений из 22, страница 1 из 1
Примерное время запроса
    #33322168
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый,

2 Xeon 2.4 G, 2 Gb оперативки, сказя 10 rpm, linux, ASE 12.5.1, размер страници 4k, табличка 35 - 40 млн записей, вот нормальным по времени сколько будет считаться ( пусть даже приблизительно ) удаление из той таблички 350 - 400 тыс строк ?

Код: plaintext
1.
2.
3.
4.
[ 1070 ] billing.bill. 1 > sp__helptable Traffic;
 Table Name              Rows      Res KB  Usd KB  Rows/KB Segment    Cr Date
 ----------------------- --------- ------- ------- ------- ---------- -------
 Traffic                  35213791    8321536   7867480     4 . 47   defa       05Jul04
...
Рейтинг: 0 / 0
Примерное время запроса
    #33323844
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это от запроса вообще-то зависит. Так не скажешь.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33324128
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто от запроса вообще-то зависит. Так не скажешь.

просто
Код: plaintext
1.
delete from traffic where moment between @From and @To
...
Рейтинг: 0 / 0
Примерное время запроса
    #33324212
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще в продолжение delete...

тот запрос блокирует таблицу полностью, если верить `Руководству по настройке производительности` один из способов избежать этого создать индекс. Я правильно понял что в этом конкретном случае это будет индекс по колонке `moment` ?

Как я уже говорил в данном запрсе в транзакции удаляется примерно 350 - 400 тыс строк, стоит ли копать в сторону уменьшения транзакции ?
...
Рейтинг: 0 / 0
Примерное время запроса
    #33324235
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин сначала написал, потом подумал и проверил....

sp__helpindex говорит что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[ 1117 ] billing.bill. 1 > sp__helpindex Traffic;
   INDEX KEY:     c = clustered            u = unique
                  a = allow dup row        s = suspect
                  i = ignore dup key

 Name                           c u i a s List of Index Keys
 ------------------------------ - - - - - -----------------------------------
 Traffic.Traffic_84452701112      Y       ID
 Traffic.TrafficFKMoment                  Moment
 Traffic.XIF718Traffic                    SourceCurrencyID
 Traffic.XIF719Traffic                    DestCurrencyID
 Traffic.XIF749Traffic                    protocolID
 Traffic.XIF762Traffic                    SourceTariffPlanID
 Traffic.XIF763Traffic                    DestTariffPlanID
 Traffic.XIF764Traffic                    SourceAccID
 Traffic.XIF765Traffic                    DestAccID
 Traffic.XIF825Traffic                    sourceTariffZoneID
 Traffic.XIF826Traffic                    destTariffZoneID

тоесть индекс вроде есть, а таблица блокируется ексклюзивно... :(
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326189
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g613
Код: plaintext
1.
delete from traffic where moment between @From and @To


Далено не все так просто
Какие @FROM и @TO , сколько таких записей в таблице, какая сама таблица, какая схема блокировки, какие в ней индексы, триггера ....

Не, не могу сказать даже примерно.
Да на самом деле и не за чем.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326192
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g613тот запрос блокирует таблицу полностью, если верить `Руководству по настройке производительности` один из способов избежать этого создать индекс.
Я правильно понял что в этом конкретном случае это будет индекс по колонке `moment` ?


Ну это как бы неоднозначно все. Вы хотите избежать сканирования всей таблицы , чтобы типа таблица не блокировалась монопольно при удалении. Но блокировка всей таблицы и способ доступа к таблице не связаны , или скажем так, не совсем связаны.

А чтобы не блокировалась монопольно таблица, надо настраивать эскалацию блокировок и/или схему блокирования таблицы.
Или уменьшать размер транзакции.

g613
Как я уже говорил в данном запрсе в транзакции удаляется примерно 350 - 400 тыс строк, стоит ли копать в сторону уменьшения транзакции ?

Смотря с какой целью копать. Если в сторону ускорения удаления копать , то не стоит. А если в сторону неблокирования таблицы - стоит.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326193
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g613sp__helpindex говорит что:


Вы пользуетесь sp__helpindex. А вы уверены, что он подходит к вашей версии ASE ? ПРосто если ASE новый, а sp__helpindex старый , то он может писать фигню всякую. Про кластерные индексы ( что их нет ), и т.п.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326530
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv g613sp__helpindex говорит что:


Вы пользуетесь sp__helpindex. А вы уверены, что он подходит к вашей версии ASE ? ПРосто если ASE новый, а sp__helpindex старый , то он может писать фигню всякую. Про кластерные индексы ( что их нет ), и т.п.

ну да, я уже ходил по граблям sp_helpindex vs sp__helpindex в ASE 12.5... :)

во в эом конкретном месте разница как раз в том что индекс ' Traffic.Traffic_84452701112 Y ID' d ltqcndbntkmyjcnb rkfcnthysq...
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326532
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv g613
Код: plaintext
1.
delete from traffic where moment between @From and @To


Далено не все так просто
Какие @FROM и @TO , сколько таких записей в таблице, какая сама таблица, какая схема блокировки, какие в ней индексы, триггера ....


moment: datetime, разница @from и @to от суток ( сутки ~ 400 тыс строк ): datetime ( есть не кластерный индекс ),
схема блокировки: data row,
тригер только на insert,
индексы показывал....
....


Не, не могу сказать даже примерно.
Да на самом деле и не за чем.

у меня оно отрабатывает ~ за 2 - 3 часа ( и просто хотелось узнать нормально ли это... ), в связи с чем выбиралось время в течении суток/дня недели когда запускать такие запросы....
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326537
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv g613тот запрос блокирует таблицу полностью, если верить `Руководству по настройке производительности` один из способов избежать этого создать индекс.
Я правильно понял что в этом конкретном случае это будет индекс по колонке `moment` ?


Ну это как бы неоднозначно все. Вы хотите избежать сканирования всей таблицы , чтобы типа таблица не блокировалась монопольно при удалении. Но блокировка всей таблицы и способ доступа к таблице не связаны , или скажем так, не совсем связаны.

А чтобы не блокировалась монопольно таблица, надо настраивать эскалацию блокировок и/или схему блокирования таблицы.
Или уменьшать размер транзакции.


Схема блокировки как уже говорил datarow.

Эскалация где вообще настраивается ? У меня вот подозрение что это sp_configure "lock promotion". если это оно то при описываемы мною размерах ( 400 тыс строк ) там должны быть такие же офигенно большие цифры ( просто 200 которые по умолчанию как то не вяжутся с сотнями тысяч... ) ?



g613
Как я уже говорил в данном запрсе в транзакции удаляется примерно 350 - 400 тыс строк, стоит ли копать в сторону уменьшения транзакции ?

Смотря с какой целью копать. Если в сторону ускорения удаления копать , то не стоит. А если в сторону неблокирования таблицы - стоит.

Вообще время за которое подчистятся устаревшие данные не столь актуально, хочется уйти от блокирования таблицы и вообще максимально сократить время блокировок....

Тоесть вот первое что щас видится это сократить числа 350 - 400 тыс до 35 - 40 тыс за раз...
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326699
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g613

ну да, я уже ходил по граблям sp_helpindex vs sp__helpindex в ASE 12.5... :)

Да просто выкинте их на фиг, их основное назначение - форматировать вывод чтобы он влезал в экран шириной в 80 символов.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326704
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g613
moment: datetime, разница @from и @to от суток ( сутки ~ 400 тыс строк ): datetime ( есть не кластерный индекс ),
схема блокировки: data rows,
тригер только на insert,
индексы показывал....
....

у меня оно отрабатывает ~ за 2 - 3 часа ( и просто хотелось узнать нормально ли это... ), в связи с чем выбиралось время в течении суток/дня недели когда запускать такие запросы....

Ну дальше -- план запроса давайте. Используется ли этот индекс там или нет.
Как там значения в moment распределяются.
Индексов у вас многовато. Но таблица DOL, это поинтереснее. Но все равно конечно не так долго должно быть.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33326708
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема блокировки как уже говорил datarow.

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

Эскалация где вообще настраивается ? У меня вот подозрение что это sp_configure "lock promotion".


Да-да.

Только они настраиваются отдельно для APL и DOL.

В вашем случае sp_configure "row lock promotion".
Но еще можно настраивать и на уровне таблицы, смотрите sp_objattribute или как ее там. Ну sp_help на таблицу сделайте , там они будут болтаться (атрибуты).
Пороги задаются в виде "нижний порог" "процент" "верхний порог".


Вообще время за которое подчистятся устаревшие данные не столь актуально, хочется уйти от блокирования таблицы и вообще максимально сократить время блокировок....

Тоесть вот первое что щас видится это сократить числа 350 - 400 тыс до 35 - 40 тыс за раз...

Ну я не думаю, что это обязательно. Можно и не снижать, только добиться , чтобы таблица не блокировалась. Почитайте про пороги, если не поймете - спрашивайте.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33327546
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСхема блокировки как уже говорил datarow.

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

Эскалация где вообще настраивается ? У меня вот подозрение что это sp_configure "lock promotion".


я думаю, что эта проца поможет настроить ;)
sp_setpglockpromote

или на уровне сервера (sp_configure):
верхняя граница
page lock promotion HWM
row lock promotion HWM
нижняя граница
page lock promotion LWM
row lock promotion LWM
...
Рейтинг: 0 / 0
Примерное время запроса
    #33327585
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСхема блокировки как уже говорил datarow.

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

Эскалация где вообще настраивается ? У меня вот подозрение что это sp_configure "lock promotion".


Да-да.

Только они настраиваются отдельно для APL и DOL.

В вашем случае sp_configure "row lock promotion".
Но еще можно настраивать и на уровне таблицы, смотрите sp_objattribute или как ее там. Ну sp_help на таблицу сделайте , там они будут болтаться (атрибуты).
Пороги задаются в виде "нижний порог" "процент" "верхний порог".


Вообще время за которое подчистятся устаревшие данные не столь актуально, хочется уйти от блокирования таблицы и вообще максимально сократить время блокировок....

Тоесть вот первое что щас видится это сократить числа 350 - 400 тыс до 35 - 40 тыс за раз...

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

с блокировкой вроде разобрался ( sp_setrowlockpromote 'table', Traffic, 500000, 500000, 100; )


план запроса
[1336] billing.bill_2.1> set showplan on;
[1337] billing.bill_2.1> dbcc traceon(302);

QUERY PLAN FOR STATEMENT 1 (at line 1).


STEP 1
The type of query is DBCC.

DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.
[1338] billing.bill_2.1> delete from traffic where moment between "07/09/2005" and "07/09/2005 14:00";

QUERY PLAN FOR STATEMENT 1 (at line 1).


STEP 1
The type of query is DELETE.
The update mode is direct.

FROM TABLE
traffic
Nested iteration.
Index : TrafficFKMoment
Forward scan.
Positioning by key.
Keys are:
Moment ASC
Using I/O Size 16 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
Using I/O Size 16 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
TO TABLE
traffic
Using I/O Size 4 Kbytes for data pages.

(147668 rows affected)


период был несколько укорочен, отработал за 13 минут, я вот подозреваю что некоторые тормоза были из за фрагментации ( в эти выходные reorg rebuild отработал ).

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

Конкретно про 10 записей. Это про то что я говорил - уменьшить размер транзакции ?
...
Рейтинг: 0 / 0
Примерное время запроса
    #33331807
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с блокировкой вроде разобрался
sp_setrowlockpromote 'table', Traffic, 500000, 500000, 100;

500000, 5000000, 50 было бы лучше. А то так слишком жестко.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33331826
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
План нормальный, индекс используется. Только IO здесь вот :
g613
Using I/O Size 16 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
Using I/O Size 16 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
TO TABLE
traffic


большое очень, если будете удалять по немногу.

Ну и даже если не понемгогу, то Using I/O Size 16 Kbytes for data pages
странновато выглядит - некластерный же индекс. Зачем читать 16к ?
Не понятно. Но надо смотреть на попадание в кэш.

g613я вот несколько не понял смысл фразы "Ну так если у вас datarows , то вы вообще все можете в ONLine удалять, одновременно с работой других пользователей. Например, по 10 записей. Только надо естественно оттьюнить запрос, чтобы он по индексу шел."

Конкретно про 10 записей. Это про то что я говорил - уменьшить размер транзакции ?


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

Кстати, не забудьте убедиться в итоге, что вам будет хватать блокировок, в вашем случае одна удаляемая запись внутри одной транзакции - одна блокировка. Ну и чтобы другим еще хватало.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33331837
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivс блокировкой вроде разобрался
sp_setrowlockpromote 'table', Traffic, 500000, 500000, 100;

500000, 5000000 , 50 было бы лучше. А то так слишком жестко.

если это не опечатка, то боюсь у меня не будет 'лишних' 400 с хвостиком метров на поддержку такого количества блокировок... А вот про 50 процентов - я если чесно не совсем понял, если можно задать верхний и нижний пороги, то какой глубинный смысл задавать еще и проценты...
...
Рейтинг: 0 / 0
Примерное время запроса
    #33331845
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПлан нормальный, индекс используется. Только IO здесь вот :
g613
Using I/O Size 16 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
Using I/O Size 16 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
TO TABLE
traffic


большое очень, если будете удалять по немногу.

Ну и даже если не понемгогу, то Using I/O Size 16 Kbytes for data pages
странновато выглядит - некластерный же индекс. Зачем читать 16к ?
Не понятно. Но надо смотреть на попадание в кэш.


хз, может от того что этот самый Moment не очень сильно 'размазан', то есть нет того, что сегодня данные добавляли с Moment = '10/17/2005' а вчера с Moment = '10/18/2005'....


g613я вот несколько не понял смысл фразы "Ну так если у вас datarows , то вы вообще все можете в ONLine удалять, одновременно с работой других пользователей. Например, по 10 записей. Только надо естественно оттьюнить запрос, чтобы он по индексу шел."

Конкретно про 10 записей. Это про то что я говорил - уменьшить размер транзакции ?


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


в общем предполагается что этот запрос будет отрабатываться когда сервер не сильно загружен, я вот щас выделил для себя отрезок в 3 часа, пока оно укладывается, если разбить на более мелкие транзакции я боюсь что оно не уложится и сумарная загрузка будет ни чуть не меньше.

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

да, у меня number of lock 1_000_000 - 128 метров памяти откушало... :)
...
Рейтинг: 0 / 0
Примерное время запроса
    #33332220
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если это не опечатка, то боюсь у меня не будет 'лишних' 400 с хвостиком метров на поддержку такого количества блокировок...

Ну я же не знаю сколько у вас там памяти под локи. ну это уж вы сами смотрите.

А вот про 50 процентов - я если чесно не совсем понял, если можно задать верхний и нижний пороги, то какой глубинный смысл задавать еще и проценты...

Нижний порог задает значение, до которого эскалации точно не будет.
Верхний порог задает значение , после которого эскалация точно наступит.
Процент задает процент от объема таблицы, при заблокировании которого
эскалация точно наступит.

Обычно задают Tlow < Percent < Thigh -- я вам про это и хотел сказать.
5миллионов - это конечно просто с потолка цифра.
...
Рейтинг: 0 / 0
Примерное время запроса
    #33332369
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Обычно задают Tlow < Percent < Thigh -- я вам про это и хотел сказать.
5миллионов - это конечно просто с потолка цифра.

Ok. Понятно.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Примерное время запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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