Size: a a a

2021 August 04

S

Sebastian in MySQL
Мне клонировали сервер точно такой же, как был на мариидб 5.5.68, и я поставил на новый сервер мариюдб  10.6.3.

Таблицы все старые перенеслись без особых бекапов и танцев с бубнами (что подозрительно)

Конфиг скопировал такой же, как в предыдущей версии - 5.5.68

Начал селектить count(*) с трех разных таблиц, и скорость селектов медленнее на новой версии, чем на старой.

Что я делаю не так? В чем проблема?

Пробовал измерить скорость до и после перезагрузки
источник

S

Sebastian in MySQL
После перезагрузки МарииДБ:
select count(*) from transactions
old   35 m 14 s 320 ms
new   1 h 25 m 647 ms

select count(*) from clients
old   4 s 814 ms
new   26 s 19 ms

select count(*) from small_table_for_test
old   78 ms
new   86 ms
источник

DE

Denis Efremov in MySQL
Ни о чем не говорит
источник

DE

Denis Efremov in MySQL
Нужно разбираться в структуре таблиц, индексах
источник

DE

Denis Efremov in MySQL
Кто клонировал и как?
источник

S

Sebastian in MySQL
https://mariadb.org/sysbench-oltp-mysql-5-6-vs-mariadb-10-0/

что на счет этих измерений, кстати?
источник

S

Sebastian in MySQL
девопсы. не знаю как. их работа для меня - черный ящик
источник

S

Sebastian in MySQL
Так оно же тоже самое осталось
источник

S

Sebastian in MySQL
правда, местами вот такое в SHOW CREATE TABLE transactions показывает:
 DTRNTRAN datetime /* mariadb-5.3 */ DEFAULT NULL,
 DTRNCREATE datetime /* mariadb-5.3 */ NOT NULL,
источник

Аа

А а in MySQL
девопсы - и результат смузёвый; )
почему вы уверены, что после клониравания все "точно такое же"? что говорит explain select ... для старого и нового сервера?
источник

АК

Александр Костюченко... in MySQL
Коллеги, добрый день. Начинаю изучать мир sql
Добрался до такой структуры, как "индекс".

Верно ли я понял, что:
1. В любой таблице есть всегда первичный индекс (ключ), который обычно создают руками при создании таблицы и вешают на ID, в противном - субд сама создаст индекс в какой-то скрытой колонке
   1.1 Следовательно, этот индекс нужен бд для выполнения любых запросов

2. Индексы по умолчанию - хранят только ссылки на записи в таблице. При запросе - сначала индекс отдает список записей, потом происходит чтение значения из каждой записи
   2.1. Можно создать кластерные индексы, которые хранят сразу значение - можете пояснить, почему тогда не создавать сразу все индексы кластерные, чтобы избежать дополнительного чтения?

3. Как я понял, при любом обновлении таблицы, индексы таблицы формируются заново
   3.1 Что будет, если сделать селект сразу после обновления записи в одной и той же таблице ?  Имею ввиду, если индекс  не успел за этой время обновиться

4. На собесе был вопрос - в каких случаях индексы могут замедлить выполнение запроса - прошу совета что почитать на данную тему

5. Почему  не будет работать вариант с "создать индекс на каждую колонку" ?
источник

SE

Sergey Efimov in MySQL
Коллеги, кто-нибудь знает куда уехала utf8 в mariadb и как её вернуть?
источник

Аа

А а in MySQL
1. "первичный" индекс это физическое расположение данных в таблице
1.1 нет
2, 2.1 данные могут браться из индекса, если в индексе есть ВСЕ данные, что перечислены в списке после select. в explain select  этот вариант будет помечен как using index
3, 3.1 если таблица не поддерживает транзакции (типа myisam) она лочится на чтение до окончания записи, а транзакционные - они отродясь для решение таких вещей сделаны.
4. например, если внутренний оптимизатор выберет не тот индекс. но это исключение, не стоит на этом зацикливаться.
5. индексы создают под конкретные запросы. для какой-то ситуации и "на каждую колонку" может понадобиться. но обычно индексы делают на более чем 1 колонку
источник

АК

Александр Костюченко... in MySQL
Благодарю.
источник

G

Grigorij in MySQL
4,5. Индексы тормозят запись и ускоряют чтение
источник

G

Grigorij in MySQL
А по остальному, я вижу, сейчас Илья напишет :D
источник

IZ

Ilia Zviagin in MySQL
1) - нет
1.1) -  нет
2) - нет. Кому и что индекс отдаёт?
2.1  потому что данные (очевидно) могут хранится только в одном месте. Но вообще, такое понятие есть в СУБД (но не в MySQL) - включающие индексы. В них при создании пишут набор полей ключа и набор дополнительных полей, которые дублируются в содержимое индекса. Цена — при каждой модификации такого поля надо копировать данные во все такие индексы.
3. НЕТ
3.1. Всё будет хорошо.
4. ответ - ни в каких. если тебе что-то будут втирать про обратное — сразу с ноги в тыкву..
5. будет работать. Вопрос тут только что мы понимаем под "работать".
источник

IZ

Ilia Zviagin in MySQL
Тормозят чуть-чуть, ускоряют на порядки.
источник

G

Grigorij in MySQL
Я бы не сказал, что чуть чуть. Просто запись настолько быстрая, что это обычно не заметно. У меня накат бекапа таблицы с индексами и без индексов прямо в разы по скорости отличается.
Плюс сильно увелчивается размер таблицы, если индексов много.
источник

G

Grigorij in MySQL
Но в целом да, ничего критичного
источник