Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. 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 наооборт в сторону увеличения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 18:48 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
автор4) Как померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ? (big)INT в mysql занимает сколько занимает, а не максимальный размер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 19:12 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
ScareCrow(big)INT в mysql занимает сколько занимает, а не максимальный размер. А документация считает иначе. Гулин Федорзаказчик надеется что это уменьшит размер и перфоманс ускорит. Размер? Ну да, уменьшит... немножко так... совсем немножко... причём это уменьшение быстро потеряется среди разброса процента заполнения блока. Дурь, короче. Перформанс? Если есть индексы - напрасные надежды, практически та же история, что и с размером, только процент немного больше. Если их нет - тоже дурь. Гулин ФедорПри дропе FK с чайлдовых таблиц надо убирать индекс или нет ? Нет. Гулин ФедорКак померить потенц. выгоду - посчитать дельту между размерами старой и новой БД ?Никак. Вернее, как ни считай, всё одно получишь какую-то цифирь в попугаях, которую неизвестно к какой заднице приложить. Проще с потолка взять - достоверность та же, но мерить и считать ничего не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 19:50 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Выгода будет 8-4=4 байта на каждую запись каждой таблицы и индекса, как минимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 20:08 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
bigint( 20 ) а что такое 20 в этом случае ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 20:33 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Гулин Федорbigint( 20 ) а что такое 20 в этом случае ? Количество ОТОБРАЖАЕМЫХ знаков. https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 20:36 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Гулин Федорbigint( 20 ) а что такое 20 в этом случае ?считайте, что ничего. Это просто 8-байтовое целое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 22:09 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Нарисовал генерацию скрпитов 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 скрипт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 18:01 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Гулин Федор, Не очень понял, зачем вам идти столь сложным путем. Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2018, 20:52 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
miksoftГулин Федор, Не очень понял, зачем вам идти столь сложным путем. Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:09 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
miksoftГулин Федор, Не очень понял, зачем вам идти столь сложным путем. Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно. Имеется ввиду : SET FOREIGN_KEY_CHECKS=0; ALTER TABLE для всех таблиц SET FOREIGN_KEY_CHECKS=1; зы скрипты пока отрабатывают долго - в общей сложности порядка 6 часов если я по удаляю индексы а потом востановлю их - насколько это может помочь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:13 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Такие SQL использую для оперделения размевро бд и таблиц можно им верить (или надо analyze table прогонять для всех таблиц ? ) 37288 размер БД до , 28397 после ~ 24 % имхо вполне себе приличный выигрыш ( там много audit таблиц с ПК из 2 полей к-е подрезались ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 13:05 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
miksoftГулин Федор, Не очень понял, зачем вам идти столь сложным путем. Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно. вот про это вопрос - не до конца понял что имеется ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 18:14 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Гулин ФедорmiksoftГулин Федор, Не очень понял, зачем вам идти столь сложным путем. Можно же целиком выключить внешние ключи, сделать ALTER TABLE для всех таблиц и включить внешние ключи обратно. вот про это вопрос - не до конца понял что имеется ввиду.SET FOREIGN_KEY_CHECKS=0; Отключает проверку тотально, перестает проверять даже существование таблиц, на которые ведет ссылка. Гулин Федорзы скрипты пока отрабатывают долго - в общей сложности порядка 6 часов если я по удаляю индексы а потом востановлю их - насколько это может помочь ?Если вы уже провели конверсию, что в чем именно должно помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 22:40 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
miksoft, конверсия пока на тесте и 6 часов многовато - не факт что такое окно будет на проде пока идея побить на куски и конвертить по частям даже при SET FOREIGN_KEY_CHECKS=0; если FK есть то не дает менять тип полей - ругается в этом и был вопрос - без дропа FK пооже не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:13 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
Гулин Федорпока идея побить на куски и конвертить по частямДа, можно за один заход менять одну таблицу и все ключи, которые на нее ссылаются. Правда, так суммарно работы станет больше, но зато меньшими кусками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 21:44 |
|
||
|
ПК с bigint на Int на БД MySQL 5.6
|
|||
|---|---|---|---|
|
#18+
1?) есть ли разница межуд командами DDL Код: sql 1. 2. 3. подозреваю что нет - но почему то начало 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 раз и не мучиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:48 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39591250&tid=1830083]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 399ms |

| 0 / 0 |
