Длина ключа индекса превышает максимально допустимую. Решение и рекомендации

Публикация № 400269

Администрирование - Администрирование данных 1С - Тестирование и исправление

Индексы оптимизация Длина ключа индекса превышает максимально

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

Проводя разработки в клиент-серверной версии СУБД, мы можем порой не задумываться, какое количество индексов у нас есть в таблице, какие поля входят в индекс и к чему это приводит.

Иногда бывает необходимо развернуть копию нашей базы на файловой базе, и мы вдруг получаем ошибку (см. скрин).

Как найти быстро все проблемные индексы, которые приводят к ошибке?

Как выйти на те поля и таблицы, где мы что-то натворили?

Известно, что имена таблиц в файловой СУБД при создании отличаются от клиент-серверной, и поиск индекса, который указан в ошибке, нам ничего не даст.

Есть, конечно, вариант: искать по совпадению слов в данных, полученных методом ПолучитьСтруктуруХраненияБазыДанных()

Но это не всегда нам поможет быстро найти проблему.

На помощь приходят системные представления SQL сервера.

  • sys.index_columns - Содержит одну строку для каждого столбца, являющегося частью индекса.
  • sys.columns - Возвращает строку для каждого столбца объекта, имеющего столбцы, например представления или таблицы. В данной таблице есть столбец "max_length" максимальная длинна в байтах. На него мы и будем ориентироваться.
  • sys.indexes - Содержит строку для каждого индекса или кучи табличного объекта, такого как таблица, представление или функция с табличным значением.

         sys.dm_db_index_usage_stats - Возвращает количество различных операций с индексами и время,
         которое было затрачено в SQL Server на последнее выполнение операции каждого типа.

Отправной точкой для поиска проблемных мест будет ограничение на индекс для файловой базы 1920 байт.

Выполняя запросы SQL для своей базы, не забудьте указать в начале инструкции USE <Имя базы>;

1) Сделаем первый запрос с рейтингом по размеру и сравним его с контрольной цифрой.

 Первый запрос

 

На скрине мы видим три таблицы с именами столбцов и индексов, которые создают нам проблему.

Осталось дело техники, найти эти данные в 1С с помощью ПолучитьСтруктуруХраненияБазыДанных() и откорректировать настройки (уменьшить длину индекса, снять индексирование).

Обычно такой результат приходится на индексированный столбец, где длина строки указана слишком длинной.

Как вариант решения: уменьшаем длину строки, или снимаем индексацию (если индексирование поставлено на всякий случай).

2) Что делать, если мы сделали все, как сказано, а ошибки при обновлении на файловую базу все равно есть, как на скрине?

Выполняем следующий запрос и получаем количество индексов на таблицу с рейтингом по убыванию.

Далее смотрим первые строки и анализируем:

 

Запрос второй

 

В данном списке мы видим количество индексов на таблицу. Начинаем анализировать сверху.

Но могу сказать, что проблема бывает не столько от количество индексов, сколько от количества полей, которые проиндексированы с доп. упорядочиванием.

Т.е. нам необходимо расшифровать - какие основные поля и сколько раз поля входят в индекс.

На практике оказалось, что наш вариант под номером два.

Как решение: снятие индексации с тех полей, которые не участвуют в отборах, выборках, связях и которые проиндексированы на всякий случай.

Запрос с расшифровкой

 

 

 3) Для анализа полей, которые входят в индекс, необходимо выполнить следующий запрос:

 

Запрос третий

 

Аналогичный результат,  но в другом представлении мы получим, выполнив хранимую процедуру sp_helpindex, передав в качестве параметра имя таблицы.

Данная методика позволила быстро выявить проблемные индексы, столбцы которые приводили к ошибке.

На основании накопленного опыта можно сказать, что не надо индексировать на всякий случай, на будущее.

Ответ на вопрос, какие поля индексировать, и условие создания индекса можно посмотреть в статье:

https://technet.microsoft.com/ru-ru/library/ms191195%28v=sql.105%29.aspx

 

Теперь нам необходимо определить неиспользуемые индексы.

Это надо в том случае, когда были созданы лишние индексы, а мы не знаем, использует ли их оптимизатор запроса или нет.

Или мы нашли множество некластерных индексов в таблице, а не знаем, какие нам нужны, а какие нет.

В данном случае можно выполнить следующий запрос с выводом неиспользуемых индексов. Обратите внимание, что используются объекты DMO, а для них необходимо, чтобы сервер работал продолжительное время, и функционал по интересующей нас таблице использовался достаточно интенсивно.

Не рекомендуется использовать данных запрос после перезапуска сервера.

 

 

Неиспользуемые индексы

 

 

 

Скачать файлы

Наименование Файл Версия Размер
SQL скрипты
.zip 3,27Kb
25.06.18
87
.zip 3,27Kb 87 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. aspirator23 414 26.09.15 15:29 Сейчас в теме
Да, реальная проблема. Столкнулся с этим в одной "безумной" базе.
adhocprog; +1 Ответить
2. CSiER 29 15.03.18 07:03 Сейчас в теме
Есть, конечно, вариант: искать по совпадению слов в данных, полученных методом ПолучитьСтруктуруХраненияБазыДанных().
Но это не всегда нам поможет быстро найти проблему.

К сожалению, не всегда есть доступ к СУБД (пример - работа ведется через хранилище, развертыванием ИБ для разработки занимается другая служба). Ускорить поиск проблемного объекта метаданных в этом случае поможет имя индекса, например:
"Длина ключа индекса превышает максимально допустимую '_InfoR24287_ByPeriod_TSSSSSSSSRSN (_Period, _Fld24288, _Fld24289, _Fld24290, _Fld24291, _Fld24292, _Fld24293, _Fld24294, _Fld24295, _Fld24296RRef, _Fld24297, _Fld24298)'" - индекс "ByPeriod" для регистра сведений, 12 полей, при этом 9 из них строковые =>
	ТаблицаСтруктурыИБ = ПолучитьСтруктуруХраненияБазыДанных();
	Для Каждого ТекСтрока ИЗ ТаблицаСтруктурыИБ Цикл
		Если Найти(ТекСтрока.ИмяТаблицы, "РегистрСведений") > 0 Тогда
			ТаблицаИндексов = ТекСтрока.Индексы;
			Для Каждого ТекИндекс ИЗ ТаблицаИндексов Цикл
				Если ТекИндекс.ИмяИндексаХранения = "ByPeriod" И ТекИндекс.Поля.Количество() = 12 Тогда
					Сообщить("> " + ТекСтрока.ИмяТаблицы);
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
Показать

теперь остается проверить в конфигураторе "подозрительные" регистры.
Skopoxod; vic777tor; Светлый ум; andr_andrey; Region102; klinval; +6 Ответить
3. wetsock 20.06.19 15:44 Сейчас в теме
Запросы актуальны для MS SQL, но не для PostgreSQL
4. vic777tor 22.12.19 16:20 Сейчас в теме
Спасибо за статью, реально помогла починить базу.
Как выяснилось, какой-то умелец в одном из справочников установил для реквизита с типом Строка(1024) свойство "Индексировать" в значение "Индексировать с доп. упорядочиванием".
В результате не загружалась в файловом варианте даже пустая конфигурация.
Оставьте свое сообщение

См. также

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

Длина ключа индекса превышает максимально допустимую. Решение с использованием технологического журнала

Инструменты и обработки Системный администратор Программист Документ XML v8 1cv8.cf Россия Абонемент ($m) Тестирование и исправление

При разработке конфигурации в клиент-серверном варианте могут возникнуть проблемы при загрузке конфигурации в файловый вариант. В статье описан один из вариантов решения проблемы.

10 стартмани

28.01.2020    861    2    newtraveller    0       

Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных" в БД SQL

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Тестирование и исправление

Обработка позволяет исправить схему имен базы данных, схема которой была испорчена и из-за этого возникают ошибки при обновлении конфигурации или при сервисной процедуре тестирования и исправления. Ошибка SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных. Имена таблиц с кодом .... Далее перечисляются пары таблиц, которые имеют одинаковый номер. Обработка таблице находит новый номер, заменяет на него все ссылки в схеме, переименовывает таблицу SQL

3 стартмани

23.01.2020    3268    71    rokhin    45       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Зарплата и управление персоналом, редакция 3.1 (3.1.12.76) - не отображается состояние сотрудника

Инструменты и обработки Программист Бухгалтер Расширение (cfe) v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m) Управление персоналом (HRM) Тестирование и исправление

После обновления конфигурации Зарплата и управление персоналом, редакция 3.1 до актуального релиза (3.1.12.76) в форме списка справочника Сотрудники перестает отображаться текущее состояние сотрудника (Работает, Уволен и т.п.)

2 стартмани

26.12.2019    1599    2    capitan    6       

Поиск и Восстановление битых ссылок (Объект не найден) (обычные и управляемые формы)

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Поиск данных Тестирование и исправление

Обработка для поиска и восстановления данных по битой ссылке (Объект не найден). Вы можете узнать информацию по удаленному объекту (его уникальный идентификатор, где используется), чтобы в бэкапной базе найти и восстановить этот объект. Данные битой ссылки восстанавливаются по COM соединению к копии базы.

1 стартмани

21.12.2019    1493    8    Diana.dedov.91    0       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для решения задач бухгалтерского учета. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Бухгалтерия” и прочих прикладных решений, в которых реализованы соответствующие механизмы для автоматизации бухгалтерских задач.

4900 рублей

Исправление ошибки платформы 8.3.16 - разворота группы подписей в формах документов. ЗУП 3.1

Инструменты и обработки Программист Пользователь Расширение (cfe) v8 v8::СПР ЗУП3.x БУ Абонемент ($m) Тестирование и исправление

После обновления платформы на релиз 8.3.16 в документах, где используются подписи ответственных лиц, при развороте группы аварийно закрывалось приложение.

1 стартмани

02.12.2019    7249    10    skudnovv    10       

Исправление ошибки в ЗУП 3.1 "Удаление сторнирующей записи невозможно" через расширение

Инструменты и обработки Программист Расширение (cfe) v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m) Тестирование и исправление

Решение вопроса по ЗУП 3.1 "Удаление сторнирующей записи невозможно" - решение с помощью расширения, чтобы можно было удалять по кнопке "Delete".

1 стартмани

23.11.2019    1927    Klinov    0       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

Ошибка при обновлении "Для одного ссылочного кода существует более одной таблицы в базе данных"

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Тестирование и исправление

После перехода на новую платформу поменялась (появилась) проверка на дублирование внутренних идентификаторов объектов метаданных. Возможная ошибка при обновлении "Для одного ссылочного кода существует более одной таблицы в базе данных". Лечится изменением идентификатора объекта метаданных.

1 стартмани

30.10.2019    4766    12    user646807_kazako.a911    13       

DevOps для 1С. Онлайн-курс проходит с 16 апреля по 11 июня 2020 года. Промо

Данный онлайн-курс предусматривает изучение процессов DevOps, их применение при разработке на платформе 1С. В результате прохождения онлайн-курса вы сможете: настроить ПО необходимое для проведения проверок и тестирования, создавать сценарии тестирования и объединять их в комплексные процессы, создавать скрипты для автоматизации процессов DevOps.

12000 рублей

Должно быть NULL в регистре бухгалтерии Хозрасчетный

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Тестирование и исправление Инструментарий разработчика

Обработка проверяет наличие и решает проблему с ошибкой развернутого сальдо в Оборотно-сальдовой ведомости (регистр бухгалтерии Хозрасчетный) из-за ошибки Универсального редактора реквизитов или кода программиста, устанавливающего пустые ссылки в значениях Валюты, Подразделения, Направления деятельности не равными NULL. И пересчёт итогов тут точно не поможет...

2 стартмани

21.10.2019    6944    15    sapervodichka    33       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Ошибка SDBL: Ожидается имя таблицы (pos=6). Причины, лечение, обход. Поиск отсутствующих таблиц изменений

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Тестирование и исправление

Получили ошибку Ошибка SDBL: Ожидается имя таблицы (pos=6) ? Надеюсь, мой опыт борьбы с этим явлением Вам поможет.

1 стартмани

04.09.2019    3791    5    burmsergey    2       

Проверка работы расширений после обновлений

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Тестирование и исправление

Иногда бывает, что после обновления конфигурации некоторые расширения перестают работать и часто такие ошибки выявляются только в процессе тестирования или рабочем режиме. При правильной разработке и проектировании расширения можно свести к минимуму такие ошибки, но иногда их не избежать. Если в базе расширений не более 5-10, то проверить каждое после обновления не составляет труда, а вот если их больше 50 - проверка отнимает слишком много времени Поэтому была написана обработка, которая в автоматическом режиме проверяет расширения, подключенные в программе. Обработка универсальная и будет работать в любой программе, в которой есть расширения.

3 стартмани

19.07.2019    5932    11    77dream77    3       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Поиск и удаление "битых" ссылок () в регистрах (сведений/накоплений)

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Кыргызстан Абонемент ($m) Тестирование и исправление

Иногда случается так, что в движениях регистров, подчиненных регистратору, теряется ссылка на регистратор "".

1 стартмани

24.06.2019    3337    13    Vyacheslide    2       

Восстановление объектов из версий в УПП 1.3 после их изменения

Инструменты и обработки Системный администратор Программист Стажер Внешняя обработка (ert,epf) v8 УПП1 Россия Абонемент ($m) Обработка документов Тестирование и исправление Обработка справочников

Обработка предназначена для массового восстановления состояния документов и справочников из версий объектов в УПП1.3, допустим после неправильной обработки.

1 стартмани

19.06.2019    2478    2    limonchenko.dm    0       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Проверка обновления. Автоматический поиск ошибок

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Сервисные утилиты Тестирование и исправление

Мы обновляем конфигурацию, и у нас более 100 пользователей. Конфигурация сильно переписана, обновление нетривиальное. Если после обновления находится критическая ошибка, приходится выгонять всех пользователей и исправлять. Поэтому перед выпуском в рабочую базу, обновление тестируют наши специалисты. Большинство ошибок находится при открытии форм. Появилась идея написать программу, которая бы автоматически открывала формы всех объектов, а найденные ошибки записывала в журнал регистрации. Получилась программа простейшего сценарного тестирования. Не требует настройки. Запускать в тестовой базе. Чтобы найти реквизиты, не добавленные на форму в процессе обновления или синтаксические ошибки, достаточно запустить тест под полными правами. Тестировали на УТ 11.4.1.271, должно работать на всех программах УФ. У нас тест работает пять минут.

1 стартмани

10.06.2019    3177    4    Mari_Kuznetzova    3       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

Расширение для исправления структуры подчиненности

Инструменты и обработки Программист Расширение (cfe) v8 1cv8.cf Россия Абонемент ($m) Тестирование и исправление

Расширение для исправления связанных документов (структура подчиненности).

1 стартмани

06.05.2019    3177    1    DNN13    1       

Восстановление структуры DBSchema

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 БП3.0 Windows Абонемент ($m) Тестирование и исправление

Обработка для анализа ошибок в структуре DBShema, восстановление структуры объектов, перенос данных из выгруженных в XML таблиц базы, при помощи "Tool 1CD".

10 стартмани

11.03.2019    6544    43    spawn_a    20       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

Ошибки, предупреждения и прочее из журнала регистрации на почту и в Telegram автоматически (БП 3, ЗУП 3.1, УТ 11.4, ERP 2.4, Розница 2.2)

Инструменты и обработки Системный администратор Программист Пользователь Внешняя обработка (ert,epf) v8 Розница УНФ ERP2 ЗКГУ3.0 БП3.0 УТ11 ЗУП3.x Абонемент ($m) Журнал регистрации Поиск данных Тестирование и исправление Email

Данная обработка позволяет анализировать журнал регистрации с пользовательским отбором (4 критерия отбора) и высылать отчет пользователю с заданной периодичностью на электронную почту или в Телеграм. Возможно использовать как регламентное задание (автоматическая отправка отчетов по времени), непосредственно запускать из клиента, а также выгружать в форму обработки отфильтрованные данные из журнала регистрации без отправки.

2 стартмани

28.01.2019    6176    29    Redinternational    3       

Замена конфигурации в правилах обмена

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 КД Абонемент ($m) Обработка справочников Тестирование и исправление Перенос данных из 1С7.7 в 1C8.X Обмен через XML Перенос данных из 1C8 в 1C8 1С7.7<->1C7.7

С помощью этой внешней обработки для конфигурации 1С:Конвертация данных, ред. 2.1 вы легко замените конфигурацию приемника или источника в правилах конвертации объектов.

2 стартмани

08.01.2019    5402    20    tomvlad    5       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Проверка актуальности итогов регистров накоплений

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Тестирование и исправление

Иногда возникают ситуации, когда с остатками происходит что-то непонятное. Остаток на начало + Оборот != Остаток на конец. После пересчета итогов проблема уходит. Но как узнать вовремя, что что-то не так?

1 стартмани

11.12.2018    4468    8    dmt    17       

PostgreSQL для 1С 8.3: ускоряем резервное копирование и восстановление для отдельной базы очень большого размера

Статья Системный администратор Программист Архив с данными v8 1cv8.cf Россия PostgreSQL Абонемент ($m) Производительность и оптимизация (HighLoad) Тестирование и исправление

В этой статье разберем оптимизацию работы с моментальным снимком отдельной базы 1С в кластере PostgreSQL средствами pg_dump.exe, pg_restore.exe, psql.exe в среде Windows Server 2008,2012,2016. А также разберем проблемные ситуации и неожиданные ограничения при работе 1С в связке с PostgreSQL. Для Linux все аналогично.

1 стартмани

03.12.2018    22059    31    vsasav    68