Назад | Перейти на главную страницу

В базе данных MySQL, совместно используемой многими клиентами, как рассчитать объем хранилища, потребляемый одним клиентом, и его данные?

Таким образом, в основном одна и та же таблица используется многими клиентами с внешним ключом, который определяет, какие данные кому принадлежат.

Спасибо

Насколько мне известно, MySQL не имеет возможности показать использование внутренних ресурсов пользователем, базой данных или таблицей, не говоря уже об использовании определенного ключа в таблице. Когда вы говорите «хранилище», вы имеете в виду хранилище на диске или использование ресурсов в памяти? Получить первое будет намного легче, чем второе, тем более что рассматриваемый элемент представляет собой одну таблицу, и ее ресурсы, вероятно, будут совместно использоваться «клиентами».

Несколько идей, которые вы можете рассмотреть в порядке возрастания сложности:

  1. Вручную подсчитайте записи по клиенту (т. Е. SELECT COUNT(*) FROM table WHERE id=XXX). Это усложняется, если в записи есть поля переменного размера, но это даст вам приблизительную оценку общего размера, используемого каждым клиентом. Обратите внимание, что это просто дает вам размер базы данных на диске, а не то, что фактически используется в настоящее время (таблица 1G может использовать почти нулевые ресурсы, если она никогда не используется).
  2. Включите ведение журнала, а затем проанализируйте запросы в журнале, чтобы узнать об использовании клиентом. Это сообщит вам, что клиент X использует 10 тыс. Запросов в день, в то время как клиент Y использует только 100 запросов в день. Это опять же не говорит вам точного использования ресурсов, но даст вам приблизительное приближение.
  3. Разделите таблицу / базу данных на несколько экземпляров MySQL на одном или разных физических / виртуальных серверах. Это непрактично, если у вас много клиентов, но также может дать вам более точное использование ресурсов.
  4. Измените исходный код MySQL, чтобы регистрировать / извлекать необходимую информацию о ресурсах.

Я бы начал с рассмотрения того, почему вам нужно знать использование ресурсов для каждого клиента. Вы действительно хотите знать ресурсы каждого клиента или просто знать, сколько запросов они выполняют? Если вы просто хотите узнать объем хранилища, необходимый для каждого клиента, тогда будет достаточно простого / сложного запроса SELECT для подсчета записей и размеров полей.