Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
Добрый день!

Есть сравнительно небольшая база данных. Ну как небольшая - сейчас 35 Mb, ориентировочно до 500 Mb (старые данные просто автоматом удаляются ночью через несколько дней после записи).

Работает совместно с многопоточным приложением на слабеньком ПК - Celeron N2840 4Gb RAM. Менять его не планируется. Разве что HDD на SSD поменять.

Раньше была база данных сделана на sqlLite, но перестало хватать ее возможностей.

Переделал на MySQL. MySQL при работе проги стал грузить процессор на 50-60% и "шуршит" диском постоянно.

Основная операция, которая грузит mysql - запись в три таблицы. В одну из них запись происходит не чаще 1 раз в секунду, а основное время - гораздо реже. Не думаю, что она является причиной загрузки процессора.

А вот в другую - может быть и до несколько десятков записей в секунду:

CREATE TABLE user_projects (
  user_id BIGINT NOT NULL ,
  site_id INT NOT NULL ,
  proj_id BIGINT NOT NULL ,
  send_queue DATETIME NULL ,
  send_time DATETIME NULL ,
  cats_state TINYINT NOT NULL DEFAULT 0 ,
  cats_mode TINYINT NOT NULL DEFAULT 0 ,
  cats_value VARCHAR(255) NULL ,
  words_state TINYINT NOT NULL DEFAULT 0 ,
  words_mode TINYINT NOT NULL DEFAULT 0 ,
  words_plus VARCHAR(255) NULL ,
  words_minus VARCHAR(255) NULL ,
  CONSTRAINT pk_user_projects_id PRIMARY KEY (user_id, proj_id) ,
  CONSTRAINT fk_user_projects_user FOREIGN KEY (user_id) REFERENCES user_list (user_id) ,
  CONSTRAINT fk_user_projects_site FOREIGN KEY (site_id) REFERENCES site_list (id) ,
  CONSTRAINT fk_user_projects_proj FOREIGN KEY (proj_id) REFERENCES site_projects (id) ,
  INDEX idx_user_projects_queue (send_queue ASC) VISIBLE ,
  INDEX idx_user_projects_send (send_time ASC) VISIBLE
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


Ну еще и лог программы - тоже до нескольких десятков записей в секунду:

CREATE TABLE bot_log (
  id INT NOT NULL AUTO_INCREMENT ,
  id_thread INT NOT NULL ,
  msg_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  msg_type INT NOT NULL ,
  msg_text TEXT NULL ,
  CONSTRAINT pk_bot_log_id PRIMARY KEY (id) ,
  CONSTRAINT fk_bot_log_thread FOREIGN KEY (id_thread) REFERENCES bot_threads (id)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


Теперь собственно вопрос: имеет ли смысл заменить СУБД на MS SQL Express?
По возможностям ее вроде бы должно хватить.
Конечно, я понимаю, что можно просто "взять и попробовать", но на это уйдут драгоценные дни.
24 фев 20, 17:36    [22085940]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск  [new]
miksoft
Member

Откуда:
Сообщений: 38826
kotyara12,

А точно нужны все эти FOREIGN KEY в таких количествах? Особенно в таблице логов?
Я бы предложил от их части избавиться.

Какой движок таблиц?
Чему равны параметры innodb_flush_log_at_trx_commit и innodb_file_per_table?
24 фев 20, 17:59    [22085953]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
miksoft
А точно нужны все эти FOREIGN KEY в таких количествах? Особенно в таблице логов?
Я бы предложил от их части избавиться.

принимается. "на автомате" сделал )) часть уберу

miksoft
Какой движок таблиц?

InnoDB, по умолчанию

miksoft
Чему равны параметры innodb_flush_log_at_trx_commit и innodb_file_per_table?

innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = ON
24 фев 20, 18:34    [22085977]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

kotyara12
имеет ли смысл заменить СУБД на MS SQL Express?

Поскольку ты не знаешь ни того ни другого, то это замена шила на мыло.

Posted via ActualForum NNTP Server 1.5

24 фев 20, 18:37    [22085982]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
Dimitry Sibiryakov, ну так я и спрашиваю знающих людей )))
24 фев 20, 18:43    [22085985]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
Dimitry Sibiryakov

Поскольку ты не знаешь ни того ни другого, то это замена шила на мыло.

Вот не понимаю я таких ответов.
Я вполне допускаю, что я много и много не знаю. Я вполне допускаю что Ваши знания в 10, 100, 1000, 100500 раз больше моих.
Так поделитесь своими значениями, подскажите... Разве это повод для язвительных комментариев? В чем проблема-то?
24 фев 20, 18:48    [22085988]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск  [new]
miksoft
Member

Откуда:
Сообщений: 38826
kotyara12
innodb_flush_log_at_trx_commit = 1
1 - это наихудший вариант с точки зрения быстродействия.
Попробуйте поставить 0.
24 фев 20, 18:52    [22085990]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

kotyara12
Так поделитесь своими значениями, подскажите...

Подсказываю: надо изучать выбранную СУБД, её инструменты настройки производительности и
обнаружения узких мест. Потом скурпулёзно применять вторые с целью понять как и куда
применить первые. Это многодневная нудная работа. Лечить по фотографии, как начал miksoft
можно, конечно, но результат не гарантирован.

Posted via ActualForum NNTP Server 1.5

24 фев 20, 18:57    [22085994]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
miksoft
Попробуйте поставить 0.

Спасибо, помогло (убрал индексы в том числе). Нагрузка снизилась.

Но все-таки, возвращаясь к собственно исходному вопросу, может для такого слабого проца на MS SQL переделать базу?
24 фев 20, 19:31    [22086005]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск  [new]
miksoft
Member

Откуда:
Сообщений: 38826
kotyara12
может для такого слабого проца на MS SQL переделать базу?
На этот вопрос не может быть ответа "да" или "нет".
Любую СУБД надо настраивать под вашу конкретную задачу.

С учетом того, то нагрузка довольно низкая, предлагаю оставить как есть и не тратить время на другие СУБД.
24 фев 20, 19:50    [22086016]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
kotyara12

Раньше была база данных сделана на sqlLite, но перестало хватать ее возможностей.

Переделал на MySQL. MySQL при работе проги стал грузить процессор на 50-60% и "шуршит" диском постоянно.

Основная операция, которая грузит mysql - запись в три таблицы. В одну из них запись происходит не чаще 1 раз в секунду, а основное время - гораздо реже. Не думаю, что она является причиной загрузки процессора.

А вот в другую - может быть и до несколько десятков записей в секунду:

Ваша основная проблема IMHO - это морально старое железо. Celeron/4G даже не продается на барахолках.
Там уже лежит техника Б/У но следующего поколения. Чисто технически я-бы вам предложил купить за 200$
новое железо. И даст бох - еще 5 лет протяните. +Надо памяти побольше т.к SQLite срёт в MemoryMap операционки.
А это есть виртуальная прослойка между диском и памятью.

Я считаю что вы больше потратите времени и нервов (на 1000$) просто бегая по форумам и проверяя ненужные
советы.

То что вы переделали на MySQL - требует пояснения по дизайну. В MySQL - это сборный конструктор типа LEGO
и надо смотреть какой тип "engine" вы выбрали для хранения. И дальше делая step-by step наблюдать как растёт
или деградирует производительность.

По поводу 1 раз или 10 раз в секунду. Это черепашья скорость. Вообще ниочем. Для современных
DBMS - 500 000 inserts / per second это уже норма.

Возможно проблему создает неудачный дизайн БД. И избыточное индексирвоание. Тоесть вы слишком аккуратно тестируете и нормализуете. А в вашей
задаче можно было-бы ввести легкие staging-tables (только для загрузки без индексов и ограничений)
и раз в в сутки синкать их с основной нормализованной моделью. Это из "best practices" по ETL я рассказываю.

По поводу загрузки CPU. У вас всё настолько запущено что CPU может быть просто следствием неудачной модели
(6 индексов) и при прочих равных условиях вам бы его хватало.
25 фев 20, 17:58    [22086729]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17390
explain analyze
26 фев 20, 15:41    [22087445]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
ScareCrow
explain analyze

Это не даст ответов на вопросы автора. Его вопрос - хай-левел архитектуры и подходить к нему с позиции explain
это слишком поздно. Поздно пить боржоми. Тем более что у него дохлый HDD и камень устарел на 10 лет.
26 фев 20, 15:51    [22087455]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
Камень относительно свежий. Да, celeron, но относительно свежий, примерно 3-х летней давности.
И, оказалось, проблема была не в нем.
А как всегда в моих кривых руках. Один из SELECT-ов выполнялся аж 9 секунд, а с учетом что их много - нагрузка на sql сервер была значительной. Поправил так, чтобы было 0,01 сек и все стало нормально :-)
26 фев 20, 21:15    [22087730]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
kotyara12
Member

Откуда:
Сообщений: 8
ScareCrow
explain analyze

опаньки !!! не знал, не знал...
очень полезная штука.
просто огромное спасибо!!!
26 фев 20, 21:17    [22087731]     Ответить | Цитировать Сообщить модератору
 Re: MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Ну дай бох.
27 фев 20, 00:07    [22087783]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить