Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
После того как выполнился запрос через ADOQuery (Delphi) происходит увеличения счётчика на величины PrepStmt(Подготовленные операторы) и CursorOpen (Открытые курсоры). После работы с данными выполняется закрытие ADOQuery.Close и очистка текста запроса ADOQuery.Sql.Clear. Но значения PrepStmt и CursorOpen не уменьшается если смотреть через SELECT * FROM sa_conn_properties() p join sa_conn_info() c on p.number=c.number WHERE PropNum in (89,92) and CommLink='local' ORDER BY PropNum, value; ну и в итоге если в программе полазить по всем окнам, то в какой-то момент на 1 коннекте окажется 50 Prepared Statements. Получим ошибку. Конечно можно увеличить Max_cursor_count и Max_statements_count, но ведь это не лучший выход. Ведь приложение по любому будет дорабатываться (и не исключено, что и 100 Max_cursor_count/Max_statements_count не хватит если они не будут высвобождаться) и зачем нагружать сервер. Причём заметил что PrepStmt увеличивается не в сам момент открытия ADOQuery, а при занесении текста запроса Sql.Add('...') на закрытом ADOQuery. А вот CursorOpen только при его открытии. Соответсвенно по логике первый должен освобождаться через Sql.Clear, а второй через Close; но этого не происходит... Спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 20:29 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
TADOQuery.Prepared := false; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 21:43 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
Prepared=false не помогает. http://] with dmSprav.adoqOverheads do begin Close; ShowMessage(BoolToStr(Prepared)); sql.Clear; ShowMessage(BoolToStr(Prepared)); sql.Add('...'); ShowMessage(BoolToStr(Prepared)); Open; end; Все сообщения говорят что ADOQuery не Prepared. И сразу после строки sql.Add('...') происходит увеличение счётчика подготовленых выражений. В BOL по этому поводу вот что: Each time a statement is sent to a database, the server must first prepare the statement. Preparing the statement can include: Parsing the statement and transforming it into an internal form. Verifying the correctness of all references to database objects by checking, for example, that columns named in a query actually exist. Causing the query optimizer to generate an access plan if the statement involves joins or subqueries. Executing the statement after all these steps have been carried out. но есть и такое: DROP STATEMENT statement [ESQL] -------------------------------------------------------------------------------- Description Use this statement to free statement resources. Syntax DROP STATEMENT [ owner.]statement-name statement-name : identifier | hostvar Usage The DROP STATEMENT statement frees resources used by the named prepared statement. These resources are allocated by a successful PREPARE statement, and are normally not freed until the database connection is released. Неужели все так запущено??? Как мне имя его то получить??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 09:24 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
IgorCCS но есть и такое: DROP STATEMENT statement [ESQL] ..... Неужели все так запущено??? Как мне имя его то получить??? Да, есть и такое. Но это ESQL и это имя никак не получить, потому что ты используешь ADO а не ESQL. Разные принципы работы знаете-ли. Вообще, по идее ADO позволяет управлять подготовленностью запросов. В описании ADO объекта Command, в проперти Prepared даже есть пример как один и тот же запрос выполняется с подготовкой и без. А впрочем вот, я тут поигрался слегка: Код: plaintext 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. Создаешь файл CheckNumberOfPreparedRequests.vbs, кладешь туда этот исходник, запускаешь через cscript CheckNumberOfPreparedRequests.vbs и наслаждаешься :) Потом попробуй повторить это на дельфях и сам поймешь что надо делать чтобы не плодить подготовленные запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 18:11 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
А ну да ESQL... Это по идее д.б. где нибудь в ключах запуска сервера или в св-х самой базы, по крайней мере так это на Оракле решается сказали... А вот в ASA найти такое не получилось.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 10:55 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
Ну всё таки каждый запрос проходит через prepared... ASA Programming Guide Using SQL in Applications Preparing statements Each time a statement is sent to a database, the server must first prepare the statement. Preparing the statement can include: Вот только как заставить его это забыть??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 10:59 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
IgorCCSА ну да ESQL... Это по идее д.б. где нибудь в ключах запуска сервера или в св-х самой базы, по крайней мере так это на Оракле решается сказали... А вот в ASA найти такое не получилось.... Чего? Какие ключи? Никаких ключей не нужно. Ты мой пример запускал? Вывод его рассматривал? Нет? А зря! Он очень красноречивый, там есть ответы на все твои вопросы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 17:28 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
А где взять можно cscript? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 17:34 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
IgorCCSА где взять можно cscript? У тебя Windows 2000 или выше есть? Значит и cscript у тебя тоже есть :) Для всех остальных виндов и документацию на wsh брать здесь: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 17:48 |
|
||
|
ASA9 Prepared Statements - когда происходит высвобождение ресурсов под Prepared Statements
|
|||
|---|---|---|---|
|
#18+
Спасибо за сприпт. С ним разобрался. А вот на Delphi вот что получается (в скобочках PrepStat-OpenCur после данной команды). with dmSprav.adoq do begin Close; (0-0) Prepared:=false; (0-0) sql.Clear; (0-0) sql.Add('...); (1-0) Open; (1-1) Close; (1-1) Prepared:=false; (1-1) sql.Clear; (1-1) sql.Add('...); (1-0) Open; (1-1) end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33261979&tid=2013403]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 429ms |

| 0 / 0 |
