Если я правильно помню, в столбце expire_date нет индекса Работа с большим количеством строк займет некоторое время.В то время как это происходит, оно также будет держать блокировку на таблице (по крайней мере, в MyISAM).
Возможно, вам будет лучше удалить удаление на основе первичного ключа (например, id), пока в таблице django_session не будет меньше строк.Как только у вас будет меньше строк, вы можете добавить индекс к expire_date и убедитесь, что вы регулярно запускаете команду cleanup .
Вам нужно будет оценить, откуда начать удаление, но при условии, чтовы знаете, что все строки с идентификатором менее 2 900 000 необходимо удалить:
delete from django_session where id < 29000000;
Чтобы избежать блокировки таблицы слишком долго, вы можете захотеть удалять несколько тысяч строк за раз, каждая в своей собственной транзакции,например,
begin;
delete from django_session where id < 10000;
commit;
begin;
delete from django_session where id < 20000;
commit;
...
begin;
delete from django_session where id < 29000000;
commit;
Конечно, вам, вероятно, следует создать скрипт для этого.
Как правило, вы хотите удалять меньше строк за раз.В целом, это займет больше времени, но не должно блокировать ваш сайт слишком долго за один раз.