Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
hi all DDL: Код: 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. Test: Код: plaintext Конфиг трейса: Код: plaintext 1. 2. 3. 4. 5. 6. Результат в трейсе: Код: 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. Уже на первой строке, с id = 1, "instead-of" триггер вьюхи должен был грохнуть за компанию все остальные строки. И это действительно произошло, т.к. в трейсе видим: OLD_ID = "1, rows affected: 3" . ВОПРОС-1. Откуда тогда в этот триггер приплыли записи с OLD.ID = 2 & 3 ? Ведь они уже были грохнуты при OLD.ID = 1, а триггер работает в той же самой транзакции и, след-но, не должен был видеть эти записи. ВОПРОС-2. Отчего кол-во NR тут в два раза больше, чем самих удалений ? (и это еще не все вопросы, дальше про возможность / скорость установки коннекта будет :)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 16:22 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
ОТВЕТ-1: стабильный курсор, аднака ОТВЕТ-2: 3 записи прочитал select, 3 записи удалил delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 16:57 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
dimitr, тогда след. вопрос. Допустим, табличка стала поширше и потяжелее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И далее для неё также создаем вьюху с "instead-of" триггером, и также оставляем включённым тумблер "ТУП" для delete-команды: Код: 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. Теперь в первом окошке запускаем трейс, а во втором - isql с командой delete from vlog, и даём ему поработать 1-2 минуты. Далее пытаемся подключиться еще одним isql'ем, дабы выполнить в нём Код: plaintext РЕЗУЛЬТАТ : а вот это уже зависит от того, ЧТО написано в триггере v_log_biud. Если там то, что помечено как "helps", то подключиться и отменить выполнение - получится. Хотя вполне возможно, что ждать придется несколько минут. Если же заменить на то, что "not helps" -- то не получится даже подключиться (по кр мере, я ждал по 10 минут). Я не понимаю, с чем это связано. В узких кругах широко известно, что каждый коннект и стейтмент периодически проверяет, нет ли к нему запроса от мониторинга. И в частности - наличие там просьбы типа "срубись нахрен, плз!" Однако, это делается только при условии, что коннект / стейтмент хотя бы как-то, но обращаются к БАЗЕ. Но у меня тут ЕСТЬ обращения к базе, во ВСЕХ случаях. А реакция на просьбу типа "срубись" - далеко не всегда. Кроме того, есть смутное сомнение: скорость реакции на запрос о срубании сильно зависит от того, сколько записей промолачивает аттач в "дополнительных" обращениях к базе по типу тех, что отмечены. Как это всё объяснить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 17:29 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
dimitrОТВЕТ-1: стабильный курсор, аднакаСтоп! Хальт! Если тут стабильный курсор, то для любого ID должно было быть одно и то же row_count! То есть, в трейсе должно было быть во: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Ы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 17:40 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
ТаблоидЕсли тут стабильный курсор, то для любого ID должно было быть одно и то же row_count!Курсор, который делает удаление во вьюхе - стабилен (ибо не видит удалений из триггера). Триггер выполняется вне контекста этого курсора, так шта он видит всё как есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 18:27 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
hvladТаблоидЕсли тут стабильный курсор, то для любого ID должно было быть одно и то же row_count!Курсор, который делает удаление во вьюхе - стабилен (ибо не видит удалений из триггера ). Триггер выполняется вне контекста этого курсора, так шта он видит всё как есть.А если взять курсор НЕ во вьюхе, а явно объявленный в каком-нить EB - он должен быть таким же стабильным или нет ? Например, две таблицы, tmain2 & tdetl2, но при на удаление в tmain2 висит триггер, который опять таки грохает все записи в tdetl2: Код: 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. И теперь запускаем трейс и вот такой блочёк: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Должен ли курсор ' c ' быть таким же бесчувственным к удалениям, которые фигачит триггер tmain2_bd в таблице tdetl2 ? Если да, то как объяснить вот это: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 19:30 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
ТаблоидА если взять курсор НЕ во вьюхе, а явно объявленный в каком-нить EB - он должен быть таким же стабильным или нет ?Явные курсоры никто не обещал стабилизировать. Они работают по-прежнему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:30 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
Таблоид, это не внешний курсор увидел. Ты count(), то откуда берёшь. Правильно из таблицы, а не из курсора. А выполненный отдельный статмент обязан видеть изменения. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:51 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:54 |
|
||
|
updatable view + BD-триггер с ошибкой (нет "where id=old.id"): странная стат-ка и эффекты
|
|||
|---|---|---|---|
|
#18+
Таблоид, и кстати здесь как раз получается что курсор стабилен, иначе он бы не пошёл дальше этой строки Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38884291&tid=1563014]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 537ms |

| 0 / 0 |
