|
|
|
Lock wait timeout exceeded; try restarting transaction
|
|||
|---|---|---|---|
|
#18+
Есть следующий запрос, в котором ,я ожидал, что будет выбираться одна запись браться блокировка, опять же на одну запись, ставить флаг - используется и отпускать блокировку на эту запись, но судя по ошибке Код: sql 1. , блокировка береться всей таблицы, а так как у меня процессов 300 одновременно пытаются получить запись с этой таблицы, это очень плохо. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Прошу совета, как лучше организовать данное дело. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 15:23 |
|
||
|
Lock wait timeout exceeded; try restarting transaction
|
|||
|---|---|---|---|
|
#18+
comalex3, не так то просто эту ошибку увидеть. Чую запрос у вас лишних страниц блокирует, а может и всю таблицу. Но это надо доказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:07 |
|
||
|
Lock wait timeout exceeded; try restarting transaction
|
|||
|---|---|---|---|
|
#18+
а! вы сами уже пришли к этом выводу . Это хорошо. Теперь посмотрите explain выбирающего запроса , оптимизируйте его и, возможно, все наладится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:08 |
|
||
|
Lock wait timeout exceeded; try restarting transaction
|
|||
|---|---|---|---|
|
#18+
comalex3 Код: sql 1. Не могу объяснить почему, но мне не нравится эта конструкция. Хотя, конечно, в блокировках виновата не она. comalex3 Код: sql 1. Зачем тут нужен RAND() ? Скорости выполнения он явно не добавляет. А вообще я бы пошел другим путем - сразу бы апдейтил нужную запись, без SELECT ... FOR UPDATE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:30 |
|
||
|
Lock wait timeout exceeded; try restarting transaction
|
|||
|---|---|---|---|
|
#18+
comalex3судя по ошибке Код: sql 1. , блокировка береться всей таблицы Не, а что ты хотел? или ты наивно полагаешь, что UPDATE тебе будет обновлять только ту строку, которая была выбрана в SELECT? так вот ни хрена... Сперва у тебя выполняется SELECT ... FOR UPDATE. В нём ты выбираешь одну запись - она в полном соответствии с документацией блокируется на запись. А потом у тебя идёт UPDATE, но не той самой одной заблокированной записи, а всех записей, которые соответствуют условиям отбора запроса. Ну и запрос в рамках транзакции блокирует их все. А ты любуешься текстом ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:43 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=99&tid=1831676]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
63ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 365ms |

| 0 / 0 |
