Можно ли ускорить UPDATE зарпос?

12
D
На сайте с 28.06.2008
Offline
1101
1221

Есть вроде бы простые запросы вида

UPDATE btxms_assets SET rgt = rgt + 2 WHERE rgt >= 123209

выполняются почти 1 сек. индекс на поле rgt и первичны на ID стоит. Можно ли его ускорить?

В
На сайте с 04.07.2017
Offline
23
#1

MyISAM? InnoDB?

D
На сайте с 28.06.2008
Offline
1101
#2

innodb_flush_log_at_trx_commit = 0 уже стоит, может удалить индексы с таблицы? При апдейте же еще и индексы обновляется, а ме они сейчас только мешают наверное?

---------- Добавлено 22.02.2018 в 14:31 ----------

Вяземский:
MyISAM? InnoDB?

InnoDB у меня

В
На сайте с 04.07.2017
Offline
23
#3

какого тип у rgt?

сколько у вас оперативной памяти и что в innodb_buffer_pool_size?

D
На сайте с 28.06.2008
Offline
1101
#4

innodb_flush_method = O_DIRECT

innodb_buffer_pool_size = 4096M

innodb_log_file_size = 256M

innodb_log_buffer_size = 16M

innodb_flush_log_at_trx_commit = 0

innodb_thread_concurrency = 4

innodb_file_per_table = 1

innodb_io_capacity = 400

innodb_open_files = 2048

innodb_buffer_pool_instances = 2

max-connect-errors = 10000

ТИП - int(11)

оперативки на ВПС 16 гигов. на ВПС 13 баз для работы одного скрипта, суммарно их объем менее 1 гб

В
На сайте с 04.07.2017
Offline
23
#5

при 16 гб памяти innodb_buffer_pool_size можно делать и больше - 8,10 например

в таблице много записей?

p.s. вообще индексы замедляют обновление и вставку

Оптимизайка
На сайте с 11.03.2012
Offline
396
#6

Индексы хороши только для select, остальные операции они замедляют. Попробуйте удалить индекс на rgt и сравните. Если у вас массовые запросы, то лучше проводить их "пачками", т.е.

START TRANSACTION;

UPDATE ...

UPDATE ...

UPDATE ...

UPDATE ...

COMMIT;

Если этот update не изменяет выводимые пользователю данные, то его можно выполнить в фоновом режиме (в коде php):

session_write_close();

fastcgi_finish_request(); // тут пользователь получает свою страницу

UPDATE ... // а сервер продолжает делать апдейты, но пользователю уже не нужно ждать

UPDATE ...

UPDATE ...

UPDATE ...

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#7

Можно попробовать убрать индексы, если выделяется достаточно innodb_buffer_pool_size

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
D
На сайте с 28.06.2008
Offline
1101
#8

Можно удалить все индесы с обновляемых таблиц - даже первичные на id?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#9

Dram, только с тех полей, которые изменяются апдейтом

edogs software
На сайте с 15.12.2005
Offline
775
#10
Dram:
Есть вроде бы простые запросы вида
выполняются почти 1 сек. индекс на поле rgt и первичны на ID стоит. Можно ли его ускорить?

Переход на ssd сильно поможет:) Такое большое время на апдейт обычно обуславливается тем, что база носится по всему диску то туда то сюда и пишет в разные места. Рандомный доступ - всегда долго.

Вариант - если апдейт поля частый, а таблица большая - вынести id, rgt в отдельную таблицу. По сути будет нечто вроде кэша. Замедления при выборке особого не будет, а скорость при апдейте увеличится в разы.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий