powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Увеличить максимальную длину ключа в таблицах MyISAM
12 сообщений из 12, страница 1 из 1
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755265
sunny1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея: для уменьшения потребления памяти мускулем решил сконвертировать все таблицы InnoDB в MyISAM, после чего запретить использование InnoDB в my.cf Сделал дамп базы, преобразовал его командой:
Код: sql
1.
cat db01.InnoDB.sql | sed 's/ENGINE=InnoDB/ENGINE=MyISAM/' > db01.MyISAM.sql


потом пытаюст импротировать дамп в очищенную базу и получаю ошибку:
Код: sql
1.
ERROR 1071 (42000) at line 781: Specified key was too long; max key length is 1000 bytes


Гуглю что это. Пишут, что превышена длина ключа, советуют или уменьшить её, поменяв, например, типы полей с varchar(255) на varchar(128), это мне не подходит, пробовал, часть таблиц поменял, но есть там одна, в которой уже нечего уменьшать. Ещё советуют поменять кодировку с utf8 на другую, это тоже не подходит, у меня база используется Drupal и там необходимо использовать таблицы utf8mb4. Подошло бы решение поднять максимальную длину ключа с 1000 до 2000, но я никак не нагуглю как это сделать через my.cf. Подскажите это вообще возможно или это жёсткое ограничение таблиц MyISAM, которое не обойти?
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755266
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983для уменьшения потребления памяти мускулем решил сконвертировать все таблицы InnoDB в MyISAMОчень, мягко говоря, странная идея.
Обычно для этого используют настройки расхода памяти .

sunny1983запретить использование InnoDBВ современных версиях в InnoDB хранится словарь.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755268
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://dev.mysql.com/doc/refman/8.0/en/create-index.html The prefix length limit is 3072 bytes for InnoDB tables that use the DYNAMIC or COMPRESSED row format. For MyISAM tables, the prefix length limit is 1000 bytes.Вот поэтому и не влезает.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755357
sunny1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ современных версиях в InnoDB хранится словарь.
Использую версию mysql-community-5.7

miksoftОчень, мягко говоря, странная идея. Обычно для этого используют настройки расхода памяти.
Ну если бы у меня была уверенность правильная эта идея или нет, я бы не спрашивал. Рассуждения были такими, что раз MySQL использует отдельные настройки расхода памяти для таблиц MyISAM: key_buffer_size и max_heap_table_size и отдельные для InnoDB: innodb_buffer_pool_size и innodb_buffer_pool_instances, то отключение одного из типов таблиц как раз позволит потребление памяти заметно уменьшить.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755368
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983для таблиц MyISAM: key_buffer_size и max_heap_table_sizemax_heap_table_size не привязан к MyISAM. Более того, это лишь максимальный предел, если этот буфер для выполнения запроса не нужен, то память под него либо не выделяется, либо выделяется по-минимуму.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755372
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983превышена длина ключа, советуют или уменьшить её, поменяв, например, типы полей с varchar(255) на varchar(128), это мне не подходит,Почему? В базе есть значения в 255 символов?
Если нет, то можно немного уменьшить, например до 250. По идее, этого должно хватить, если это поле единственное в ключе.
Ну или использовать префикс примерно того же размера - 250.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755639
sunny1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftПочему? В базе есть значения в 255 символов?
Если нет, то можно немного уменьшить, например до 250. По идее, этого должно хватить, если это поле единственное в ключе.
Ну или использовать префикс примерно того же размера - 250.
Ну пару таблиц я поправил таким способом, рассудив что значения полей aid и cid вряд ли будут длиннее. А вот с такой таблицей вряд ли что можно сделать:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `ctools_object_cache` (
  `sid` varchar(64) NOT NULL COMMENT 'The session ID this cache object belongs to.',
  `name` varchar(128) NOT NULL COMMENT 'The name of the object this cache is attached to.',
  `obj` varchar(128) NOT NULL COMMENT 'The type of the object this cache is attached to; this essentially represents the owner so that several sub-systems can use this cache.',
  `updated` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'The time this cache was created or updated.',
  `data` longblob COMMENT 'Serialized data being stored.',
  PRIMARY KEY (`sid`,`obj`,`name`),
  KEY `updated` (`updated`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='A special cache used to store objects that are being...';
/*!40101 SET character_set_client = @saved_cs_client */;
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755649
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983А вот с такой таблицей вряд ли что можно сделать:Надо разбираться детальнее.
Во-первых, попытаться ужать размер полей.
Например, что за sid, которому нужно 64 символа для хранения? Может, можно перейти на меньший размер и в байтах?
Какие самые длинные значения бывают в полях `sid`,`obj`,`name` ?

Во-вторых, можно попробовать использовать префиксы при указании первичного ключа так, чтобы сумма их длин не превышала 1000 байт. Зависит от фактического наполнения этих полей.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755650
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983
Код: sql
1.
2.
3.
4.
5.
  `sid` varchar(64) NOT NULL COMMENT 'The session ID this cache object belongs to.',
  `name` varchar(128) NOT NULL COMMENT 'The name of the object this cache is attached to.',
  `obj` varchar(128) NOT NULL COMMENT 'The type of the object this cache is attached to; this essentially represents the owner so that several sub-systems can use this cache.',
...
PRIMARY KEY (`sid`,`obj`,`name`)

P.S. Но за такое архитектора БД надо увольнять без выходного пособия.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755651
sunny1983
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftP.S. Но за такое архитектора БД надо увольнять без выходного пособия.
Вот я не думаю, что в команде разработки CMS, которая входит в top5 бесплатных CMS, дураки сидят.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755654
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983miksoftP.S. Но за такое архитектора БД надо увольнять без выходного пособия.
Вот я не думаю, что в команде разработки CMS, которая входит в top5 бесплатных CMS, дураки сидят.Во-первых, это таблица не из ядра CMS, а из одного из многочисленных модулей. А там за всеми не уследишь.
Во-вторых, из top5 никак не следует, что там нет дураков.

Я вот нашел, кто индекс превратил в первичный ключ - https://www.drupal.org/project/ctools/issues/504286
А вот кто придумал такой индекс - не нашел.

Судя по отсутствию отсылок к типу движка, видимо, еще тогда предполагалось, что будет использоваться InnoDB без вариантов.
...
Рейтинг: 0 / 0
Увеличить максимальную длину ключа в таблицах MyISAM
    #39755714
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sunny1983miksoftP.S. Но за такое архитектора БД надо увольнять без выходного пособия.
Вот я не думаю, что в команде разработки CMS, которая входит в top5 бесплатных CMS, дураки сидят.

В друпале-то? У меня для тебя плохие новости.

Но, если подходить с точки зрения "Вот я не думаю, что в команде разработки CMS, которая входит в top5 бесплатных CMS, дураки сидят.", то незачем трогать тип движка таблиц, раз его выбрали разработчики.
MyISAM не подерживает транзакции и блокируется по любому чиху, у тебя есть 100% уверенность, что ничего не сломается из-за этого?

Оптимизации расходования памяти надо проводить настройками, а не отключением нормального движка и заменой его на более ущербный.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Увеличить максимальную длину ключа в таблицах MyISAM
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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