Size: a a a

2020 November 23

A

Andrey in MySQL
Ilia Zviagin
Напиши свой запрос update
update product set variants = '[]' where id = 86430; - 5сек
источник

AO

Andrey Opeykin in MySQL
а id это pk ?
источник

AO

Andrey Opeykin in MySQL
это не вам =)
источник

IZ

Ilia Zviagin in MySQL
Andrey
update product set variants = '[]' where id = 86430; - 5сек
Вот, классно.

Давай думать теперь, сколько времени займет этот запрос
как функция от количества записей у тебя в таблице N.

Пока не думаем про index maintenance
источник

IZ

Ilia Zviagin in MySQL
Andrey Opeykin
а id это pk ?
Он утверждает, что индексов у него нет вообще
источник

AO

Andrey Opeykin in MySQL
Ilia Zviagin
Он утверждает, что индексов у него нет вообще
Ну я потому и спросил, что если id - не pk, то будет боль и ад
источник

A

Andrey in MySQL
да id это pk)
источник

IZ

Ilia Zviagin in MySQL
Andrey
да id это pk)
Так у тебя есть индексы или нет?
источник

IZ

Ilia Zviagin in MySQL
Andrey
да id это pk)
Может ты DDL таблицы пришлешь?
источник

IZ

Ilia Zviagin in MySQL
Погоди пока...
источник

A

Andrey in MySQL
Ilia Zviagin
Может ты DDL таблицы пришлешь?
CREATE TABLE product (
id int NOT NULL AUTO_INCREMENT,
category_id int DEFAULT NULL,
title longtext COLLATE utf8mb4_unicode_ci,
url longtext COLLATE utf8mb4_unicode_ci NOT NULL,
sku varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
description json DEFAULT NULL,
created_at datetime NOT NULL,
updated_at datetime DEFAULT NULL,
images json DEFAULT NULL,
update_error longtext COLLATE utf8mb4_unicode_ci,
variants json DEFAULT NULL,
html longtext COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (id),
KEY IDX_D34A04AD12469DE2 (category_id),
CONSTRAINT FK_D34A04AD12469DE2 FOREIGN KEY (category_id) REFERENCES category (id)
) ENGINE=InnoDB AUTO_INCREMENT=7018017 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Прост
по дефолту же id - AI + PK
источник

IZ

Ilia Zviagin in MySQL
Andrey
CREATE TABLE product (
id int NOT NULL AUTO_INCREMENT,
category_id int DEFAULT NULL,
title longtext COLLATE utf8mb4_unicode_ci,
url longtext COLLATE utf8mb4_unicode_ci NOT NULL,
sku varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
description json DEFAULT NULL,
created_at datetime NOT NULL,
updated_at datetime DEFAULT NULL,
images json DEFAULT NULL,
update_error longtext COLLATE utf8mb4_unicode_ci,
variants json DEFAULT NULL,
html longtext COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (id),
KEY IDX_D34A04AD12469DE2 (category_id),
CONSTRAINT FK_D34A04AD12469DE2 FOREIGN KEY (category_id) REFERENCES category (id)
) ENGINE=InnoDB AUTO_INCREMENT=7018017 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Прост
по дефолту же id - AI + PK
так и индексы есть, и PK есть. Что тебе надо тогда?
источник

AO

Andrey Opeykin in MySQL
Предлагаю запросить explain
источник

A

Andrey in MySQL
Ilia Zviagin
так и индексы есть, и PK есть. Что тебе надо тогда?
понять/исправить почему update по pk занимает столько много времени
источник

IZ

Ilia Zviagin in MySQL
Andrey
Всем привет.
Подскажите, От чего может зависtть время обновления строки в таблице по ид.
В таблице нет индексов (пересчитывать нечего)
Локи не вешаю.
Выбираю по ид. Апдейчу по ид.
Время апдейта растёт с количеством "одновременных" апдейтов в таблицу.
процесслист грузится около минуты и в нем одни апдейты жизнью по 1+сек (до 20 сек доходит иногда)

Таблица весит 30гб
мускул 8
Вот конфиг бд
[mysqld]
wait_timeout=600
max_allowed_packet=1000M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
default_authentication_plugin=mysql_native_password
max_binlog_size=500M
expire_logs_days=1
skip-log-bin
innodb_buffer_pool_size=15G
slow_query_log=/var/log/mysql/mysql-slow.log
long_query_time=1
В таблице нет индексов (пересчитывать нечего) - НАВРАЛ
Локи не вешаю. — ТОЖЕ НАВРАЛ.

Время апдейта растёт с количеством "одновременных" апдейтов в таблицу. — я думаю, и тут ты просто говоришь то, что не имеет отношения к действительности.
источник

IZ

Ilia Zviagin in MySQL
Andrey
CREATE TABLE product (
id int NOT NULL AUTO_INCREMENT,
category_id int DEFAULT NULL,
title longtext COLLATE utf8mb4_unicode_ci,
url longtext COLLATE utf8mb4_unicode_ci NOT NULL,
sku varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
description json DEFAULT NULL,
created_at datetime NOT NULL,
updated_at datetime DEFAULT NULL,
images json DEFAULT NULL,
update_error longtext COLLATE utf8mb4_unicode_ci,
variants json DEFAULT NULL,
html longtext COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (id),
KEY IDX_D34A04AD12469DE2 (category_id),
CONSTRAINT FK_D34A04AD12469DE2 FOREIGN KEY (category_id) REFERENCES category (id)
) ENGINE=InnoDB AUTO_INCREMENT=7018017 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Прост
по дефолту же id - AI + PK
ВОт DDL
источник

IZ

Ilia Zviagin in MySQL
Andrey
update product set variants = '[]' where id = 86430; - 5сек
Вот запрос . Так?
источник

A

Andrey in MySQL
Ilia Zviagin
Вот запрос . Так?
да
источник

IZ

Ilia Zviagin in MySQL
Andrey
да
Ну так он должен мгновенно выполняться.
Откуда 5 сек?

Оно конечно, JSON там у тебя...Может быть всякая жопа с ним...
Но не на столько же.
источник

A

Andrey in MySQL
он выполняется мгновенно когда параллельно не выполняются такие же запросы
источник