Гость
Map
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД / 16 сообщений из 16, страница 1 из 1
24.02.2020, 17:36
    #39930270
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
Добрый день!

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

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

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

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

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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;



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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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?
По возможностям ее вроде бы должно хватить.
Конечно, я понимаю, что можно просто "взять и попробовать", но на это уйдут драгоценные дни.
...
Рейтинг: 0 / 0
24.02.2020, 17:59
    #39930278
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
kotyara12,

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

Какой движок таблиц?
Чему равны параметры innodb_flush_log_at_trx_commit и innodb_file_per_table?
...
Рейтинг: 0 / 0
24.02.2020, 18:34
    #39930292
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
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
...
Рейтинг: 0 / 0
24.02.2020, 18:37
    #39930294
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
kotyara12имеет ли смысл заменить СУБД на MS SQL Express?

Поскольку ты не знаешь ни того ни другого, то это замена шила на мыло.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2020, 18:43
    #39930297
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
Dimitry Sibiryakov, ну так я и спрашиваю знающих людей )))
...
Рейтинг: 0 / 0
24.02.2020, 18:48
    #39930298
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
Dimitry Sibiryakov

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

Вот не понимаю я таких ответов.
Я вполне допускаю, что я много и много не знаю. Я вполне допускаю что Ваши знания в 10, 100, 1000, 100500 раз больше моих.
Так поделитесь своими значениями, подскажите... Разве это повод для язвительных комментариев? В чем проблема-то?
...
Рейтинг: 0 / 0
24.02.2020, 18:52
    #39930300
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
kotyara12
innodb_flush_log_at_trx_commit = 1
1 - это наихудший вариант с точки зрения быстродействия.
Попробуйте поставить 0.
...
Рейтинг: 0 / 0
24.02.2020, 18:57
    #39930303
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
kotyara12Так поделитесь своими значениями, подскажите...

Подсказываю: надо изучать выбранную СУБД, её инструменты настройки производительности и
обнаружения узких мест. Потом скурпулёзно применять вторые с целью понять как и куда
применить первые. Это многодневная нудная работа. Лечить по фотографии, как начал miksoft
можно, конечно, но результат не гарантирован.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.02.2020, 19:31
    #39930311
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
miksoft
Попробуйте поставить 0.

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

Но все-таки, возвращаясь к собственно исходному вопросу, может для такого слабого проца на MS SQL переделать базу?
...
Рейтинг: 0 / 0
24.02.2020, 19:50
    #39930315
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
kotyara12
может для такого слабого проца на MS SQL переделать базу?
На этот вопрос не может быть ответа "да" или "нет".
Любую СУБД надо настраивать под вашу конкретную задачу.

С учетом того, то нагрузка довольно низкая, предлагаю оставить как есть и не тратить время на другие СУБД.
...
Рейтинг: 0 / 0
25.02.2020, 17:58
    #39930722
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
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 индексов) и при прочих равных условиях вам бы его хватало.
...
Рейтинг: 0 / 0
26.02.2020, 15:41
    #39931122
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
explain analyze
...
Рейтинг: 0 / 0
26.02.2020, 15:51
    #39931128
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
ScareCrow
explain analyze

Это не даст ответов на вопросы автора. Его вопрос - хай-левел архитектуры и подходить к нему с позиции explain
это слишком поздно. Поздно пить боржоми. Тем более что у него дохлый HDD и камень устарел на 10 лет.
...
Рейтинг: 0 / 0
26.02.2020, 21:15
    #39931303
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
Камень относительно свежий. Да, celeron, но относительно свежий, примерно 3-х летней давности.
И, оказалось, проблема была не в нем.
А как всегда в моих кривых руках. Один из SELECT-ов выполнялся аж 9 секунд, а с учетом что их много - нагрузка на sql сервер была значительной. Поправил так, чтобы было 0,01 сек и все стало нормально :-)
...
Рейтинг: 0 / 0
26.02.2020, 21:17
    #39931304
kotyara12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
ScareCrow
explain analyze

опаньки !!! не знал, не знал...
очень полезная штука.
просто огромное спасибо!!!
...
Рейтинг: 0 / 0
27.02.2020, 00:07
    #39931344
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД
Ну дай бох.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL против MS SQL EXPRESS : что выбрать по нагрузке на диск / процессор при записи в БД / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]