|
|
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Как правильно писать запросы, чтобы они не разбирались повторно при разных значениях данных? Попробуйте объяснить на примере типа: Код: plaintext 1. Нужно уметь вставлять разные значения X, чтобы снизить количество разборов операторов. Вариант Код: plaintext 1. 2. 3. 4. 5. при вызовах с разными <smth> не работает и генерирует для каждого вызова Misses in library cache during parse: 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2003, 00:20:01 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
а как ты проверяешь результаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2003, 14:59:14 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Я использую SQL_TRACE и TKPROF, иногда исходный SQL_TRACE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 13:09:48 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Насколько понимаю ты хочешь не парсить запрос при изменении колонки. Так не получится. Будешь парсить каждый раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 16:44:05 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Надо биндить переменные т.е. вместо записи select * from table where column=10 писать select * from table where column=переменная есть еще способ установить в ora.ini какую-то переменную (забыл как называется) в значение FORCE, и оракл сам будет при компиляции заменять 10 на произвольную переменную (что иногда работает неправильно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 17:25:08 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
cursor_sharing ... и создает дополнительную нагрузку на CPU ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 17:29:56 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 17:37:32 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Я выполнила такой запрос 5 раз. Как видно из отчета Оракл все использует bind variable для INSERT INTO T VALUES( V_X ); см. в отчете INSERT INTO T VALUES ( :b1 ) Выполене 5 раз. Под Parse 5 имеется в виду soft parse. А не найден в кэше запрос был только 1 раз, при первом запуске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2003, 17:41:50 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Вопрос для killed С одной строны ... и создает дополнительную нагрузку на CPU Но ведь с другой стороны будет использоваться уже ранее подготовленный план выполнения -- что является несомненной экономией. Или я не прав? Подумав логически я таки у себя включил cursor_sharing = FORCE Может пересмотреть свое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 06:56:14 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2 Simon PL/SQL сам "биндит" переменные. 2 killed и Поплюев Алексей Боюсь, что в примере с insert в PL/SQL cursor_sharing бесполезен по вышеуказаной причине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 09:28:47 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2AI: PL/SQL сам не биндит переменные! это факт (до оракле 9 точно) убедитесь что у вас cursor_sharing=FORCE и tkprof Вам это покажет если надо инсертами засунуть в бд кучу информации то лучше использовать bulk binds будет гораздо быстрей, чем просто кучей инсертов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 10:15:49 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2 Simon А что я тогда показывал слушателям на курсах с 1997 года? Именно то, что замена простого SQL на PL/SQL блоки приводит к появлению bind-переменных. Использовал я именно tkprof и v$sql. cursor_sharing вообще появился в 8.1.6. До этого его не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 10:29:46 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2Al declare i integer; j integer; begin i:=10; select col into j from table where pkey=i; select col into j from table where pkey=10; end; в первом варианте происходит использование переменных, во втором бинда нет если вы мне не верите то включите autotrace и посмотрите в tkprof (только цифру 10 каждый раз при запуске меняйте на что-нибудь другое) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 10:58:16 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
to Simon Так изначально речь и шла про первый случай. См. Код: plaintext 1. Реальный запрос в tkprof выглядит INSERT INTO T VALUES ( :b1 ) Т.е. Оракл сам биндит переменные. Во втором случае вашего переменные отсутствуют select col into j from table where pkey=10; И естественно ничего биндится не будет если не установить cursor_sharing=false ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 11:48:21 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
Извиняюсь cursor_sharing=FORCE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 11:53:39 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2Violina так Al утверждает, что в PL/SQL разницы нет, что там всегда все само биндится, а я ему говорю что есть:) вот:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 12:00:26 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
to Simon Да биндит не всегда, проверила по tkprof Код: plaintext 1. 2. Код: plaintext 1. 2. Код: plaintext 1. 2. bind не происходит! Но в случае исходного вопроса, будет ответ, что приведенное решение уже является лучшим которое может быть в данном контексте, т.к. используется bind переменная и соответсвенно soft parse. Ведь так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 12:15:13 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2 Simon Запрос без участия переменных не биндится. В этом нет смысла, поскольку запрос "одноразовый". Даже оракл это понимает. Кстати я не утверждал, что всегда. Тем более, что Вы сами подтвердили наличие "биндинга". И я писал тоже о переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 12:21:07 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2Al: значит я неправильно понял ----------------------------------------------------------------------------- короче вывод: 1. бинд переменных нужен для того чтобы уменьшить количество разборов в лайброри кэш 2. для этого в sql используем запросы вида insert into t values (:x) где :x переменная которую надо забиндить в pl/sql insert into t values (p) где p - переменная (это и есть наверно тот автоматический биндинг, который подразумевал Al) 3. а если делаем совсем по уму, то используем bulk bind, т.е вместо ста инсертов загоняем все в pl/sql таблицу и делаем один инсерт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 12:41:44 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
to Simon Про bulk bind очень интересно, можно примерчик если не сложно. Например в данном случае я хочу вставить в таблицу Т значения 4, 9, 8, 5, 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 12:48:08 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2 Simon Сама PL/SQL таблица занимает место в стеке серверного процесса. И он может захватить много памяти. Я таким образом однажды поверг в "сиреневый призрак смерти" солярис (перетащил 10 млн записей в таблицу записей). Кроме того, таблицы PL/SQL динамические структуры и работают не бог весть как быстро. Будьте очень внимательны! Это просто предостережение, а не борьба с таблицами PL/SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 13:02:06 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
2Violina: вот пример Код: 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. 2Al: не согласен с тем что plsql таблицы работают медленно они работают нормально, только иногда требуют много памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 13:41:19 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
>С одной строны ... и создает дополнительную нагрузку на CPU Но ведь с другой стороны будет использоваться уже ранее подготовленный план выполнения -- что является несомненной экономией. Или я не прав? Подумав логически я таки у себя включил cursor_sharing = FORCE Может пересмотреть свое решение? Когда оракл постоянно занят разбором сиквела, вы увидите конкуренцию за library cache latches. Любая конкуренция на защелках - это повышенная нагрузка на CPU вследствие самой природы доступа к защелкам. Но что еще хуже, это узкое место с точки зрения масштабируемости системы. Т.е. при увеличении кол-ва запросов/пользователей, ситуация будет ухудшаться явно не в линейной зависимости. Поэтому здесь trade off. Я где-то видел упоминание Стива Адамса со ссылкой на Тома, где последний оценивал издержки FORCE в +30% для версии 8.1.7 В 8.1.6 есть баги, связанные с cursor_sharing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 13:43:01 |
|
||
|
снижение misses in library cache during parse
|
|||
|---|---|---|---|
|
#18+
кстати, я могу ошибаться, но "Misses in library cache during parse: 1" относится скорее к самому plsql-блоку из-за различных значений <smth> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2003, 13:59:56 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32183445&tid=1989976]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 450ms |

| 0 / 0 |
