|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
Добрый день! На sybase пишу запрос на перекомпилирование процедуры: USE Base GO exec sp_recompile 'STORED_PROC_NAME' GO возвращает, что этот объект - не таблица. Эта процедура имеет ещё ряд вложенных процедур, WITH RECOMPILE не подойдет. Прошу указать, в чем проблема и как можно решить? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2017, 15:54 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
ferey, sp_recompile - Marks stored procedures and triggers related to a specified table for recompilation when they next run. sp_recompile objname Parameter information : » objname : Name of a table. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 08:15 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
SAV4SAV, Спасибо. Возможно ли каким-то образом перекомпилировать процедуру с рядом вложенных процедур, не прибегая к WITH RECOMPILE? Есть ли в sybase какая-нибудь иная процедура, схожая с sp_recompile, которая действует в отношении к процедурам? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 10:24 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
ferey, "WITH RECOMPILE не подойдет" - имелось в виду exec <sored_proc_name> with recompile, или Create Proc ... with recompile ? Атак, для ASE 12.5.3 я такой команды не знаю. Может что изменилось в младших версиях ... На свой страх и риск (нет внятных описаний) можно попробовать что-то из этого К примеру Код: sql 1. 2. 3. 4.
Или dbcc proc_cacherm(type, dbname, objname) Version - Added prior to 11.9 Usage - type is V,P,T,R,D,C,F, or S (must be uppercase) - corresponds to View, Proc, Trigger, Rule, Default, Cursor, SQLJ Function, SQL function - Must have sybase_ts_role to execute - - Objects removed from cache may need to be read from disk and recompiled Но приведет ли это к рекомпиляции ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 11:51 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
ferey, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 12:14 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
SAV4SAV, Рекомпил при операции exec 'STORED_PROC' В 'STORED_PROC' так же имеется ряд вложенных процедур, хотелось бы иметь вариант, в котором не нужно в каждой вложенной процедуре прописывать WITH RECOMPILE после каждой операции CREATE PROC в них. Благодарю за подсказку, но юзать боязно) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 12:22 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
fereySAV4SAV, Рекомпил при операции exec 'STORED_PROC' В 'STORED_PROC' так же имеется ряд вложенных процедур, хотелось бы иметь вариант, в котором не нужно в каждой вложенной процедуре прописывать WITH RECOMPILE после каждой операции CREATE PROC в них. Благодарю за подсказку, но юзать боязно)А зачем тебе перекомпилировать процедуру? Смысл в этом есть только чтобы процедура использовала более актуальные планы, но актуальность планов меняется только после большого обновления таблиц участвующих в запросах. На практике это значит: загрузил много новых данных в таблицу, обновил много данных, удалил много строк - запускаешь на эту таблицу sp_recompile и все проблемы исчезают. Зачем вручную перекомпилировать одну хранимую процедуру я не могу придумать. Ну если очень хочется, самое простое: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2017, 18:00 |
|
sp_recompile не перекомпилит процедуру
|
|||
---|---|---|---|
#18+
fereySAV4SAV, Рекомпил при операции exec 'STORED_PROC' В 'STORED_PROC' так же имеется ряд вложенных процедур, хотелось бы иметь вариант, в котором не нужно в каждой вложенной процедуре прописывать WITH RECOMPILE после каждой операции CREATE PROC в них. Благодарю за подсказку, но юзать боязно) сначала рекурсивно надо вызывать sp_depends Но только по процедурам рекурсию выстраивать, затем можно стирать нацеленные процедуры из кэша через указанный выше DBCC Но толку в этом мало, поскольку при незначительном изменении схем таблиц под процедурами (например, создании индекса) процедуры, ссылающиеся на таблицу , должны автоматом выбрасываться из процедурного кэша и перекомпилировываться. это не гарантированное по докам проведение, но тем не менее обычное ,т.е. так работает. Напоминаю также, что если схема таблиц существенно изменились, например, вы добавили поле ново или удалили, то вы по документации обязаны пересоздать все процедуры и триггера, ссылающиеся на изменненную таблицу, даже если в этих процедурах по логике приложения ничего не должно измениться (например, процедура не использовала удаляемое поле). Так что все зависит от того, для чего вы там это пытаетесь запилить. Если для переформулирования логики процедур, то sp_recompile было бы мало, надо drop/create, если для пересоздания планов, то они и так должны пересоздаваться, если это не происходит, то можно писать репорт о баге в ASE. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 03:04 |
|
|
start [/forum/topic.php?fid=55&fpage=3&tid=2009637]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 384ms |
0 / 0 |