LINUX.ORG.RU
ФорумAdmin

Системные требования для MySql сервера

 , ,


0

1

...

Знатоки! Помогите, пожалуйста, приблизительно подсчитать ресурсоемкость сервера MySql!

Есть самодельный сервис хранения информации на php(apache), у которого для каждого клиента заранее создана база данных (27 таблиц, без триггеров и хранимых процедур) в MySql.

Каждые 5 минут удаленный клиент подключается к серверной БД и выполняет 60 простых команд INSERT и 14 простых команд SELECT (которые в 99% случаев возвращают пустой результат).

Есть XEN VPS сервер, с характеристиками:

  • Гарантированная память ОЗУ: 768 Мб
  • Файл подкачки SWAP : 768 Мб
  • Дисковое пространство: 40 Гб
  • CPU: до 2,26 ГГц
  • Доступные ОС: CentOS(предустановлена), Gentoo, Ubuntu, Debian, Fedora, Slackware.

И мне нужно подсчитать сколько клиентов можно разместить на одном таком VPS сервере, чтоб все они работали без лагов (при учете 1клиент = 1 база данных = 1 подключение каждые 5 минут).

Буду рад любой помощи!

...

Надо время выполнения «типичного» запроса измерить, тогда можно оценить максимальное количество клиентов и вероятность заданной задержки.

ilovewindows ★★★★★
()
Ответ на: комментарий от NightGhost

Используются таблицы MyISAM.

Время выполнения «типичного» запроса подсчитать не могу, так как сервис еще не размещен на VPS сервере. А размещен он будет только тогда, когда я укажу количество(приблизительное) клиентов(1клиент=1база данных) которое будет обслуживаться сервером.

Teplohod
() автор топика
Ответ на: комментарий от Teplohod

Что-то мне подсказывает, что основным ограничением будет объем RAM VPS, от этого и будем отталкиваться, используя формулу:

key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections = объем памяти в килобайтах. Но это все верно в случае простых запросов без join, union, sort и т.п.

Можно ли увидеть пример select запросов?

NightGhost
()
Ответ на: комментарий от NightGhost

Да, именно RAM меня и ограничивает.

Когда клиент подключаеться к сервису он выполняет очень простые запросы:

  • 14 запросов на выборку
    SELECT * FROM `tableForSelect1` WHERE `TimeOfLastChanges` > lastSynchronizationTime
    
    ...
    
    SELECT * FROM `tableForSelect14` WHERE `TimeOfLastChanges` > lastSynchronizationTime
    
  • 60 одиночных запросов на вставку в одну таблицу (сделать групповую вставку одним запросом не выйдет):
    INSERT INTO `tableForInsert` (col1 ... col7) VALUES(val1 ... val7);
    

При первом подключении каждый клиент получит все содержимое 14 таблиц для выборки:

  • tableForSelect1: 10000 строк, 10 колонок
  • tableForSelect2: 10000 строк, 5 колонок
  • tableForSelect3 ... tableForSelect14: 100 строк, 5 колонок

При последующих подключениях запросы на выборку будут возвращать максимум десяток записей. В 99% случаев результат будет пустой.

Teplohod
() автор топика
Ответ на: комментарий от Teplohod

А какая разница сколько клиентов , если размер диска и RAM уже задан ?

ilovewindows ★★★★★
()
Ответ на: комментарий от Teplohod

При первом подключении каждый клиент получит все содержимое 14 таблиц для выборки

почему-бы не сделать скрипт, который выполняет запросы, и не запустить Over9000 раз _одновременно_ этот скрипт на любой железке? а цифры потом экстраполировать. Только это должна быть честная железка, а не виртуалка (в виртуалке время будет _меньше_, из-за того, что ресурсы у виртуалки почти всегда больше, т.к. хостеры гарантируют _минимальные_ показатели).

drBatty ★★
()
Ответ на: комментарий от drBatty

Никогда с хостерами не связывался, они какие-нибудь ограничения на входящий исходящий траффик оговаривают, на количество подключений ?

ilovewindows ★★★★★
()
Ответ на: комментарий от NightGhost

NightGhost Не подскажете какие оптимальные размеры буферов MySQL (key_buffer_size,read_buffer_size, sort_buffer_size) стоит установить в моем случае?

В стандартной конфигурации my-large.cnf (для систем с 512МБ RAM):

key_buffer_size = 256M
sort_buffer_size = 1M
read_buffer_size = 1M

В конфигурации my-medium.cnf (для систем с 64МБ):

key_buffer_size = 16M
sort_buffer_size = 512K
read_buffer_size = 256K

Первая конфигурация как раз подходит под характеристики моего VPS сервера(768МБ из которых приблизительно 256МБ уйдет на функционирование CentOS + Apache), но возможно мне не нужны такие большие буферы?

Подскажите, пожалуйста!

Teplohod
() автор топика
Ответ на: комментарий от ilovewindows

Никогда с хостерами не связывался, они какие-нибудь ограничения на входящий исходящий траффик оговаривают, на количество подключений ?

угу. Как иначе-то? Это хомячков имеют как хотят, и со скоростью, и с подключением, и с процентом рабочего времени. Нормально это всё оговаривается в договоре.

drBatty ★★
()
Ответ на: комментарий от Teplohod

Первая конфигурация как раз подходит под характеристики моего VPS сервера(768МБ из которых приблизительно 256МБ уйдет на функционирование CentOS + Apache), но возможно мне не нужны такие большие буферы?

ИМХО нужны. Может даже и побольше. И, ИМХО 512 будет маловато для ваших запросов - было-бы неплохо кешировать индексы и таблицы, даже для пустых запросов, но я даже не представляю, какое у вас время реакции. Вообще говоря, мне кажется что конфигурация вообще слабовата, даже для одного юзера. Хотя не знаю... ИМХО такое количество таких запросов займёт слишком много времени... Особенно если памяти мало.

drBatty ★★
()
Ответ на: комментарий от ilovewindows

тариф можно ведь и поменять, особенно в большую сторону.

drBatty ★★
()
Ответ на: комментарий от Teplohod

В случае со столь простыми запросами имеет смысл ориентироваться на read_buffer ~ 1-2М, sort. key_buffer_size установить в 20-60М, все зависит от объема индексов в базе. Ну а далее по формуле. Если запросики будут частыми и однотипными, имеет смысл выделить с десяток мегабайт под QueryCache...

NightGhost
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.