|
|
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
На большом проекте по мере возрастания нагрузки стали появляться деадлоки, анализ кода результатов не дал. Да и вообще не понятно в каком именно месте возникают дедлоки, в триггерах таблицы, на которую ругается мускуль есть несколько запросов и так понимаю проблема как раз в каком-то(каких-то) из них. Как вычислить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 09:23:42 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Вообще ошибка происходит при инесерте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 09:24:19 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Hett, Please give us: 1. Which MySQL version? 2. Which storage engine? 3. Which insert? 4. which select?(if any) 5. table structure of main tables. and any other valuable information... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 10:30:30 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
MySQL 5.5, InnoDb структуру таблиц и запросы все же выкладывать не хотелось бы, да и их слишком много, не думаю что кто-то захочет во всем этом копаться. Я думал может есть какие-то специализированные штучки-дрючки для выявления сих проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 10:53:19 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
нашел вроде тут :) SHOW ENGINE INNODB STATUS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:03:29 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Похоже что происходит в этом месте: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:11:38 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
SQL код - это триггер BEFORE UPDATE ON fh_user_file ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:11:59 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. За такое канделябрами еще не били? Либо пересматривайте структуру хранения, либо хотя бы блокируйте всю таблицу fh_user_file перед выполнением SQL-запроса, который вызывает сработку этого триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:19:44 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Shahriyar.R 4. which select?(if any) SELECT-ы для этого не нужны. Они не будут участвовать в deadlock-ах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:25:49 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
miksoft Код: sql 1. За такое канделябрами еще не били? Либо пересматривайте структуру хранения, либо хотя бы блокируйте всю таблицу fh_user_file перед выполнением SQL-запроса, который вызывает сработку этого триггера. +1. вот он и deadlock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 11:29:16 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, with selects i mean maybe some lock for selects exist before insert or smth else. i found here: mysql tables in use 9, locked 9 if it is means that at the moment of deadlock there was 9 table lock,maybe some other process executing with this one.. because i see only 1 table here in trigger. or i am wrong? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 12:23:11 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Да я уж понял, это место сразу не понравилось. К тому же велика вероятность дубликата. Когда нагрузка была совсем маленькой этой проблемой никто не заморачивался, видимо. Как теперь это переделать малой кровью что-то ума не приложу, автоинкремент сюда никак не приделать, есть ли какие счетчики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 12:25:04 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Shahriyar.Rbecause i see only 1 table here in trigger. or i am wrong? я выложил только часть триггера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 12:27:11 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
miksoftлибо хотя бы блокируйте всю таблицу fh_user_file перед выполнением SQL-запроса Где-то тут создавал тему на счет того, что при удалении больших данных из одной таблицы, запись или чтенеи из другой начинает лажать. В случае блокировки WRITE боюсь вообще из этой таблицы никто ничего не сможет прочитать, в таких случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 12:36:15 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Можно синхронизировать с помощью http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_get-lock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 12:55:17 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Как бы это ужасно не было, лучше способа не придумал. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 13:27:49 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Лучше так, но общей сути не меняет Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 13:59:48 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
Shahriyar.RMasterZiv, with selects i mean maybe some lock for selects exist before insert or smth else. В InnoDB select (без for update) проходит без блокировок. И дедлоков соотв. не может быть от него. И дедлок может быть только на InnoDB. Соответственно, SELECT никогда в дедлоках не участвует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 15:58:36 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
HettКак бы это ужасно не было, лучше способа не придумал. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Тем не менее это уже намного лучше, чем было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 16:00:10 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
HettЛучше так, но общей сути не меняет Лучше -- так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И тогда GET_LOCK/ RELEASE_LOCK можно будет убрать. Да, надеюсь, этот код весь в объемлющей транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 16:02:22 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
В транзакции. А чем ваш вариант лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 17:02:44 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
HettВ транзакции. А чем ваш вариант лучше? Блокирует сначала строку таблицы, откуда берётся ID, а потом из неё читает значение. В твоём варианте всё наоборот -- сначала значение читается, потом блокируется. В итоге одно значение ключа может быть использовано многими сессиями. Можно и как ты делал, но надо добавить в SELECT фразу FOR UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 19:42:18 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
MasterZivHettВ транзакции. А чем ваш вариант лучше? Блокирует сначала строку таблицы, откуда берётся ID, а потом из неё читает значение. В твоём варианте всё наоборот -- сначала значение читается, потом блокируется. В итоге одно значение ключа может быть использовано многими сессиями. Можно и как ты делал, но надо добавить в SELECT фразу FOR UPDATE. Каким образом он ее блокирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 19:55:22 |
|
||
|
Как вычислить деадлок?
|
|||
|---|---|---|---|
|
#18+
HettMasterZivпропущено... Блокирует сначала строку таблицы, откуда берётся ID, а потом из неё читает значение. В твоём варианте всё наоборот -- сначала значение читается, потом блокируется. В итоге одно значение ключа может быть использовано многими сессиями. Можно и как ты делал, но надо добавить в SELECT фразу FOR UPDATE. Каким образом он ее блокирует? Накладывая UPDATE-блокировку, каким же ещё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2013, 20:11:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38405662&tid=1835986]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 328ms |

| 0 / 0 |
