powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ПК с bigint на Int на БД MySQL 5.6
17 сообщений из 17, страница 1 из 1
ПК с bigint на Int на БД MySQL 5.6
    #39591219
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.
MySQL 5.6

Есть OLTP с-ма с 200+ таблицами
ПК у таблиц bigint(20)
В БД куча FK на PK.

Стал вопрос переделать все ПК на int
( реально не надо bigint там даже по большим таблицам - ~ 10 млн максимал. id )

Дамп БД 20 гиг и БД растет в послед. время
за 3 месяца - удвоение.
заказчик надеется что это уменьшит размер и перфоманс ускорит.
Пока надо сделать эксперимент на тест.енве

Сделал простой тест на 2 таблицах - типы для FK должны быть одинаковы.
т.е вначале надо дропать FK ( и индексы ? или ) с чайлдовых таблиц а потом менеять тип в головных.

1?) Какие могут быть отриц. последствия ?

2?) Надо как то снять готоыве FK
может у кого есть готовый скрпит или ссылка
снять готовые FK
Ясно что information_schema.TABLE_CONSTRAINTS + другие

3?) При дропе FK с чайлдовых таблиц надо убирать индекс или нет ?
ALTER TABLE <table1> CHANGE COLUMN id1 id1 int
будет ли разница в скорости выполнения при наличии/отстувтия индекса ?

(тут есть тонкости что в 95% случая имя FK совпадает с именем индекса но вот в оставшихся 5% нет )


4) Как померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ?

PS Обычно DDL наооборт в сторону увеличения.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591250
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор4) Как померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ?


(big)INT в mysql занимает сколько занимает, а не максимальный размер.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591279
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow(big)INT в mysql занимает сколько занимает, а не максимальный размер.
А документация считает иначе.

Гулин Федорзаказчик надеется что это уменьшит размер и перфоманс ускорит.
Размер? Ну да, уменьшит... немножко так... совсем немножко... причём это уменьшение быстро потеряется среди разброса процента заполнения блока. Дурь, короче.
Перформанс? Если есть индексы - напрасные надежды, практически та же история, что и с размером, только процент немного больше. Если их нет - тоже дурь.

Гулин ФедорПри дропе FK с чайлдовых таблиц надо убирать индекс или нет ?
Нет.

Гулин ФедорКак померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ?Никак. Вернее, как ни считай, всё одно получишь какую-то цифирь в попугаях, которую неизвестно к какой заднице приложить. Проще с потолка взять - достоверность та же, но мерить и считать ничего не нужно.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591292
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выгода будет 8-4=4 байта на каждую запись каждой таблицы и индекса, как минимум.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591312
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigint( 20 )
а что такое 20 в этом случае ?
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591316
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорbigint( 20 )
а что такое 20 в этом случае ?
Количество ОТОБРАЖАЕМЫХ знаков.
https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39591345
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорbigint( 20 )
а что такое 20 в этом случае ?считайте, что ничего. Это просто 8-байтовое целое.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39592927
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нарисовал генерацию скрпитов

FK нашел здесь
http://blog.mclaughlinsoftware.com/2014/03/17/capture-mysql-foreign-keys/


SELECT sql_statement
INTO OUTFILE 'd:/05_fk_recreate.sql'
FIELDS TERMINATED BY '\r\n'
LINES TERMINATED BY '\r\n'
FROM tmp_FK_create



про @@secure_file_priv прочитал дожено быть пустым - елси нет то писать можно только в эту директорию

1?) можно ли в скритах склеить имя выходного файла а потом подставтиь его динмаически ?
(подозреваю что нет)
Целиком клеить строку

2?) можно ли обработать как то в скрипте налчие файла - т.е если есть то удалить его или остановить MySQL скрипт
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39592995
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

Не очень понял, зачем вам идти столь сложным путем.
Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39593242
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftГулин Федор,

Не очень понял, зачем вам идти столь сложным путем.
Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39593247
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftГулин Федор,

Не очень понял, зачем вам идти столь сложным путем.
Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно.

Имеется ввиду :
SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE для всех таблиц

SET FOREIGN_KEY_CHECKS=1;

зы скрипты пока отрабатывают долго - в общей сложности порядка 6 часов
если я по удаляю индексы а потом востановлю их - насколько это может помочь ?
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39593282
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT table_schema     
   , Round(Sum(data_length + index_length) / 1024 / 1024, 1) sz_db_mb
FROM   information_schema.tables 
GROUP  BY table_schema
;
SELECT 
table_name AS `Table`, 
round(((data_length + index_length) / 1024 / 1024), 1) size_mb
FROM information_schema.TABLES 
WHERE 
table_schema = database()
ORDER BY 2 desc


Такие SQL использую для оперделения размевро бд и таблиц
можно им верить (или надо analyze table прогонять для всех таблиц ? )


37288 размер БД до , 28397 после ~ 24 %
имхо вполне себе приличный выигрыш ( там много audit таблиц с ПК из 2 полей к-е подрезались )
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39593517
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftГулин Федор,

Не очень понял, зачем вам идти столь сложным путем.
Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно.
вот про это вопрос - не до конца понял что имеется ввиду.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39593621
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин ФедорmiksoftГулин Федор,

Не очень понял, зачем вам идти столь сложным путем.
Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно.
вот про это вопрос - не до конца понял что имеется ввиду.SET FOREIGN_KEY_CHECKS=0;
Отключает проверку тотально, перестает проверять даже существование таблиц, на которые ведет ссылка.
Гулин Федорзы скрипты пока отрабатывают долго - в общей сложности порядка 6 часов
если я по удаляю индексы а потом востановлю их - насколько это может помочь ?Если вы уже провели конверсию, что в чем именно должно помочь?
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39594066
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
конверсия пока на тесте и 6 часов многовато - не факт что такое окно будет на проде
пока идея побить на куски и конвертить по частям

даже при
SET FOREIGN_KEY_CHECKS=0;

если FK есть то не дает менять тип полей - ругается
в этом и был вопрос - без дропа FK пооже не обойтись
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39594445
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорпока идея побить на куски и конвертить по частямДа, можно за один заход менять одну таблицу и все ключи, которые на нее ссылаются.

Правда, так суммарно работы станет больше, но зато меньшими кусками.
...
Рейтинг: 0 / 0
ПК с bigint на Int на БД MySQL 5.6
    #39595652
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1?) есть ли разница межуд командами DDL

Код: sql
1.
2.
3.
	
ALTER TABLE ba  MODIFY tid SMALLINT NULL ;
	ALTER TABLE ba CHANGE COLUMN tid tid SMALLINT NULL ;



подозреваю что нет - но почему то начало 2 версия ( ну вот подправили так Скрипт не знаю зачем )
стала дольше выполняться - раньше макс. было 8 минут - теперь 2 раз уже фейлится по таймауту
не думаю что из за этого но вдруг.


2?) Если команда фейлится через 6 минут с Workbench
Error Code: 2013. Lost connection to MySQL server during query 600.516 sec
я нашел там настройки таймаутов - там и стоит 600 сек.

Edit -> Preferences -> SQL Editor and set to a higher value this parameter:

а с командной строки как это установить ?
и есть ли там какой-то глобальный таймаут чтобы уставноить 1 раз и не мучиться
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ПК с bigint на Int на БД MySQL 5.6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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