У меня есть таблица DB, в которой каждая строка имеет случайно сгенерированный первичный ключ, сообщение и пользователь. Каждый пользователь имеет около 10-100 сообщений, но есть 10k-50k пользователей.Удаление строк из конкурирующей таблицы
Я пишу сообщения ежедневно для каждого пользователя за один раз. Я хочу выбросить старые сообщения для каждого пользователя, прежде чем писать новые, чтобы таблица была как можно меньше.
Сейчас я сделать это эффективно:
delete from table where user='mk'
Затем записать все сообщения для этого пользователя. Я вижу много споров, потому что у меня много потоков, которые делают это одновременно.
У меня есть дополнительное требование, чтобы сохранить самый последний набор сообщений для каждого пользователя.
У меня нет прямого доступа к БД. Я пытаюсь угадать проблему, основанную на некоторой обратной связи. Причина, по которой я сосредотачиваюсь на этом сценарии, заключается в том, что запрос на удаление показывает много времени ожидания (опять же - насколько мне известно) плюс его добавленный бит функциональности.
Может кто-нибудь предложить какие-либо советы?
было бы лучше:
select key from table where user='mk'
Затем удалить отдельные строки оттуда? Я думаю, что это может привести к менее жестокой блокировке.
Это действительно довольно сложно agnose database performance problmes, когда мы «не имеем прямого доступа к БД». мы можем провести весь день.Было бы полезно, если бы вы могли выполнить некоторые тесты. В частности, вам действительно нужно запустить трассировку 10046, чтобы увидеть, где ожидает инструкция DELETE. Итак, можете ли вы получить прямой доступ к базе данных? – APC