|
Производительность курсоров
|
|||
---|---|---|---|
#18+
ASE 15 Много раз слышал, что курсоры это "зло", потому что сильно тормозят. Но недавно пришлось с этим столкнуться. Код: plaintext 1. 2.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Это происходит из-за того, что каждый update в курсоре отдельная транзакция? Если да, тогда можно ли это обойти как-нибудь? Например, применить новые фичи ASE 15, такие как delayed commit. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 21:32 |
|
Производительность курсоров
|
|||
---|---|---|---|
#18+
А при чем здесь транзакции??? Ты разницу между командами и транзакциями видишь? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 21:40 |
|
Производительность курсоров
|
|||
---|---|---|---|
#18+
White Owl, Транзакции я привел как пример! Мне не понятна другая вещь. Что является узким местом в производительности у курсора??? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 22:00 |
|
Производительность курсоров
|
|||
---|---|---|---|
#18+
cherrex_DenТранзакции я привел как пример!Ничего себе пример. Курсор требует ресурсов. И памяти и процессора. Отсюда и разница в производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 23:42 |
|
Производительность курсоров
|
|||
---|---|---|---|
#18+
В принципе здесь вкратце это описано Ладно, примем тормознутость курсоров как догму White Owl-у большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2010, 00:03 |
|
Производительность курсоров
|
|||
---|---|---|---|
#18+
cherrex_Den wrote: > Много раз слышал, что курсоры это "зло", потому что сильно тормозят. Но > недавно пришлось с этим столкнуться. Так курсоры не зло, а инструмент. Если ими правильно пользоваться, по назначению -- это благо. Неправильно -- зло. Неправильно использовать курсоры, когда они не нужны. > declare my_cur cursor for > select col1 from my_table where col2 = *1* for update Если в курсоре у тебя нет ORDER BY, значит курсор тебе не нужен был. (исключение: вызов хранимой процедуры для каждой строки курсора.) > declare @col1 datetime > > open my_cur > fetch my_cur into @col1 > while @@sqlstatus =*0* > begin > > update my_table > set col1 = '1900.01.01 00:00:000' > where current of my_cur > > fetch my_cur into @col1 > end > close my_cur > > deallocate cursor my_cur Это можно сделать одним запросом ? Можно. Значит, курсор не нужен. > Это происходит из-за того, что каждый update в курсоре отдельная транзакция? это происходить может много изза чего. В том числе и изза того, что тут N транзакций вместо одной. > Если да, тогда можно ли это обойти как-нибудь? Да, конечно, начать одну большую транзакцию и в рамках неё всё сделать. > Например, применить новые фичи ASE 15, такие как delayed commit. О, придумал. Сначала сам всё правильно сделай. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2010, 12:12 |
|
|
start [/forum/topic.php?fid=55&gotonew=1&tid=2010556]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
90ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 506ms |
0 / 0 |