Дросселировать или ограничить ресурсы, используемые пользователем в базе данных?
Я хотел бы знать, как базы данных (например, MySQL) могут управлять ресурсами пользователя (как это делает Oracle Database Resource Manager), чтобы иметь пользователей, которые могут получать ресурсы только тогда, когда база данных в основном простаивает.
https://stackoverflow.com/questions/2418581/is-there-a-way-to-throttle-or-limit-resources-used-by-a-user-in-oracle
3 ответа
Зависит.
У Oracle есть менеджер ресурсов. У SQL Server тоже есть (получил в 2008 году). Другие (MySQL) нет.
как они работают? Как и любой планировщик. По сути, они измеряют счетчики производительности, и если один пользователь / база данных превышает выделенный лимит, его запросы замедляются (обычно с меньшим приоритетом) по сравнению с остальными.
Обратите внимание, что "база данных в основном простаивает" - ДЕЙСТВИТЕЛЬНО сложный вопрос для баз данных. о чем ты говоришь? IO? ЦПУ? Различные запросы имеют различные узкие места.
MySQL, насколько я знаю, не имеет способа искусственно ограничивать использование ресурсов пользователем.
Обычно вы не ограничиваете доступ к базе данных / запросы напрямую, если вы хотите предлагать клиентам разные уровни обслуживания, вы делаете это на другом уровне (например, вы ограничиваете количество процессов, отвечающих на веб-запросы, это косвенно ограничивает использование ресурсов в целом бэкэнд-инфраструктура).
Пользователи, которые чрезмерно используют общую систему для того, чтобы создавать проблемы другим пользователям, обычно обнаруживаются другими способами (например, мониторинг системы предупредит вас о не отвечающей системе) и убиваются вручную. Но это не регулярное "планирование" нормальных операций, это обнаружение проблем и реагирование.
Вы можете ограничить количество ресурсов на пользователя, изменив команды.
ALTER USER 'dbreports'@'aihello.com' WITH MAX_QUERIES_PER_HOUR 100;
ALTER USER 'dbreports'@'aihello.com' WITH MAX_UPDATES_PER_HOUR 10;
ALTER USER 'dbreports'@'aihello.com' WITH MAX_CONNECTIONS_PER_HOUR 5;
ALTER USER 'dbreports'@'aihello.com' WITH MAX_USER_CONNECTIONS 2;
Дополнительная информация здесь: https://dev.mysql.com/doc/refman/8.0/en/user-resources.html .