Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ПК с bigint на Int на БД MySQL 5.6 / 17 сообщений из 17, страница 1 из 1
25.01.2018, 18:48
    #39591219
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
Добрый день всем.
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
25.01.2018, 19:12
    #39591250
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
автор4) Как померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ?


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

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

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

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

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
29.01.2018, 20:52
    #39592995
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
Гулин Федор,

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

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

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

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

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

SET FOREIGN_KEY_CHECKS=1;

зы скрипты пока отрабатывают долго - в общей сложности порядка 6 часов
если я по удаляю индексы а потом востановлю их - насколько это может помочь ?
...
Рейтинг: 0 / 0
30.01.2018, 13:05
    #39593282
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
Код: 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
30.01.2018, 18:14
    #39593517
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
miksoftГулин Федор,

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

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

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

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

Правда, так суммарно работы станет больше, но зато меньшими кусками.
...
Рейтинг: 0 / 0
02.02.2018, 14:48
    #39595652
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПК с bigint на Int на БД MySQL 5.6
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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / ПК с bigint на Int на БД MySQL 5.6 / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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