1с получить имя сервера sql
Данные sql-скрипты и Clr-функции (VS 2010, MS SQL Server 2008) предназначены для извлечения из 1Сv82 (MS SQL) данных об именах 1С для таблиц и столбцов БД MS SQL с использованием полнотекстового поиска. Предполагаемое использование : интеграция 1С. Не использует средства 1С.
Данные sql-скрипты и Clr-функции (VS 2010, MS SQL Server 2008) предназначены для извлечения из 1Сv82 (MS SQL) данных об именах 1С для таблиц и столбцов БД MS SQL с использованием полнотекстового поиска. Предполагаемое использование : интеграция 1С. Не использует средства 1С.
О том, как устроены clr-функции и как их разворачивать на сервере см.
В начале строки - ключ 1С типа char(36) (k36) , по которому осуществляется привязка к Config, в конце - индекс sql-наименования столбца или таблицы (num), по которому можно это самое наименование однозначно определить в дальнейшем.
Полученный выше набор ключей 1С (Select k36 from @db)содержит, в том числе, ключи таблиц 1С, которым соответствуют поля [FileName] в Config. Из последнего извлекаются записи с where [FileName] in (Select k36 from @db),
а поля BinaryData распаковываются в наборы строк вышеупомянутой функцией lines.
SELECT [FileName], f.Line [CLine]
cross apply [Rig].[dbo].[lines] ([BinaryData]) f
where [FileName] in (Select k36 from @db)
Однако далее возникает проблема, связанная с большим объемом данных, полученных при распаковке. В моем варианте он составил около 300 тыс. строк текста, из которого надо извлечь ключи char(36).
Вариант решения связан с полнотекстовым индексированием полученных строк и использованием предиката CONTAIN вида
SELECT * WHERE CONTAINS(c.CLine, @k36) and LEFT(c.CLine, 5)='
Второе условие в WHERE - это просто выделение строк с 1С -именами.
Далее полученная таблица привязывается к представлениям метаданных [INFORMATION_SCHEMA].[TABLES],[INFORMATION_SCHEMA].[COLUMNS]
c помощью индекса num. Он формируется с помощью функции fnGetNum, которая выделяет группу цифр подряд в конце имени таблицы или столбца, например из _Acc6_ExtDim8081 получится 8081.
Интересует следующий момент: как организовать написание прямого запроса в 1с? Без использования внешних компонент или библиотек.
Возможно есть какая-нибудь книга, посоветуйте.
(2) + 1
что тут еще посоветовать?
и традиционный вопрос: нафига? )
(1)Ну так, интересно.
(2)Т.е. я просто пишу SQL запрос и он работает?
Так?
(5)Там и так все работает.
Я так понял это вот я заменил просто 1совский запрос английскими словами, но вытащить данные из SQL таблиц я не могу. Я так понимаю что что-то дополнительно надо писать, а что именно?
+(10)Я может не правильно понимаю? Прямой запрос - это который напрямую к SQL таблицам обращается? В общем мне надо именно к ним обратиться.
В любом слчае я не могу использовать Внешние источники данных. Надо просто кодом в обработке написать.
(24)[В любом слчае я не могу использовать Внешние источники данных. Надо просто кодом в обработке написать.]
просто кодом + без доп объектов или компонент или библиотек = низяяяяяяяяяяяяяяяяяяя
(26) это не пять, это больше!
Ну попробуй в обработке написать: "О башой и магучий SQL, ну пусти меня, ну пажалуста. не знаю я паролей и знать не хочу"
(27) если без объектов и компонент, то напиши функции доступа нужного sql сервера в 1с коде, иначе пользуйся тем что дают
(39) Пока не опишешь зачем тебе это, почему не хочешь по-другому и не представишь полную ситуацию - никто не даст тебе полный ответ.
В целом - все варианты уже перечислили.
опередили, буду банален, adodb тебе в помощь.
А что 8.2 в клиент-сервере тормозит? Может ты просто неправильно готовишь?
(41)Так ну вообщем, сел изучать прямые запросы(как попой чуствовал), и тут подкинули задачку, кто-то ее делал, но не доделал и скинули мне. Смысл не особо думаю важен, от меня требуется считывать некоторые данные таблиц SQL, а так же записывать ну и анализировать их в 1с(в 1с это я уже умею:)). Доп библиотеки нельзя использовать(хз как проверить используется ли 1с++ уже?) Попросили написать все в обработке + можно модуль сделать, Внешние источники данных нельзя пользоваться, открыв базу увидел, что его и нет возможности добавить. Логин и пароль от SQL не дали, если надо то дадут, просто у прогера который до меня писал я не нашел чтоб он вводил пароль и логин. Собственно все.
+49 почему именно так все дело обстоит - копайте "3хзвенная архитектура 1с", вечернее домашнее чтение.
(44) ему, я так понял, надо чтоб как в 77 - данные 1с-а получать напрямую из базы SQL, ибо "че-то херово работает 1с-ый запрос".
(52) ну судя по (50)
>> от меня требуется считывать некоторые данные таблиц SQL, а так же записывать ну и анализировать их в 1с(в 1с это я уже умею:)).
где-то в сторонней базе хранятся дополнительные данные (у меня, к примеру, это данные траффике посетителей в магазине, данные дает строронняя система) я эти данные получаю (при формировании отчета) и миксую с продажами т.е. вывожу продажи по часам, количество посетителей и считаю хитрые коэффициенты. Может и ему что-то подобное надо?
(53) в данном примере совершенно не важно что там хранится т.к. это просто пример. С тонкосятями будет разбираться после того как в основах разберется. Но для справки там варчары лежат.
(50) >>прямые запросы(как попой чуствовал)
- если бы попа что-то у вас чувствовала, то вы бы ощутили, насколько в 8 погано с обработкой данных СУБД. И совсем нет никаких "прямых запросов" а-ля 7.
>> Доп библиотеки нельзя использовать(хз как проверить используется ли 1с++ уже?)
- 1с++ нет вообще в 8, допбиблиотеки для 8 пока за рамки графических примочек не ушли.
1Вопрос. Значит мне точно нужен логин и пароль? Если да то я не буду париться спрошу просто и все у заказчика.
(58) для подключения к базе в любом случае логин и пароль нужен, другой вопрос где его указывать. Можно указывать в 1С, а можно в системе настроить подключение и там указать логин и пароль, а в 1С вызывать нужное подключение (с уже указанным логином и паролем)
да, "от меня требуется считывать некоторые данные таблиц SQL, а так же записывать ну и анализировать их в 1с(в 1с это я уже умею:))" - у вас там все так не понимают?
(60) да, там просто строки. В некоторых случаях числа. Ничего криминального нет. Но даже если бы и было, не вижу проблем преобразовывать как мне надо. Более того, структура той БД не совсем простая, там также используются различные ID, требуется соединять много таблиц чтобы выбрать нужные данные, но это уже детали.
Ладно дали что-то поизучать, дали пример и надо логин и пароль спросить. Буду копаться, пока не стоит вас больше мучать)
(68) да нихрена ты не понял.
Есть объект в 1С (документ, справочник и т.д.), для реализации этого объекта на SQL сервера создаются какие-то таблицы. Эти таблицы заполняются платформой. Легко и просто получить из них данные ты НЕ МОЖЕШЬ. Да и не нужно это.
А вот если у тебя данные какой-то другой системы т.е. просто SQL база в которой данные лежат в более-менее понятном виде - получай сколько угодно.
ппц, обсуждение на уровне - меня попросили написать прошение в конституционный суд США. Английский алфовит я в книжке видел, что делать дальше?
(71)Короче как я понял. 1с подрублена к sql, там дальше чем-то создали несколько таблиц левых и с ними мне надо обмениваться.
Блин дайте что почитать)))
если 1с база, то есть масса других способов, опять же от зависит от конфы, иногда проще КД использовать
(67) еще раз про реляционные базы и отличия их от "типа СУБД 1с":
в РБД вы соединяете ТАБЛИЦЫ и поля в них по ключам, посик - по индексам. все просто и понятно, работает как самолет.
в 1с вы находите ССЫЛКУ, и по ней ищете другое поле в ДРУГОЙ таблице, которое тоже может быть ссылкой и вести дальше.
т.е. НЕТ алгоритма как это "автоматизировать", а надо тупо искать ссылки и выуживать по ним след данные. чем и занимается 1с-сервер. почему и времени у него уходит миллион лет. почему и SQL сервер выдает 1с-севреру все, что сколько-нибудь связано с данными запрошенными, все таблицы целиком, порой до миллионов записей доходит за раз.. сколько бы не убеждали сторонники "1с сделала революцию в обработке данных!", что все не так, а выбирается корректно, нежно и красиво.
так что сравннеи ябыть не может в принципе - SQL и 1с-поделка )))
(73) >> там дальше чем-то создали несколько таблиц левых и с ними мне надо обмениваться.
- где, в базе 1с.
(73) если дело так обстоит то в (44) тебе дали рецепт adodb к ms sql есть на каждом компьютере с установленным толстым клиентом
(78) что-то я тебя не пойму. Мы сейчас про то "как это делает сервер 1С" или о том как данные хранятся и получаются в обход сервера 1с?
(81) далеко не на каждом, даже если винда стоит. опять же надо проверять драйвер и совместимость ))
а если база 1с - то все советы не помогут.
(82) в обход нельзя ничего получить, окромя несвязанного набора данных..
а нужны объекты, а не набор бессмысленных строк и чисел. Так ведь? ))
(83) Дима, когда будет КонсольЗапрсоов с прямыми запросами к базе SQL? )))
(85) по теме - если база SQL от 1с-а, то читайте !запросы 1с!, и забудьте про SQL-базу.
(86)
>> в обход нельзя ничего получить, окромя несвязанного набора данных..
э. а что мешает использовать: ПолучитьСтруктуруХраненияБазыДанных?
Описание:
Получает информацию о структуре таблиц базы данных для переданных в качестве параметра массива имен объектов метаданных или массива объектов метаданных для административных действий с ней.
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
(88) >> я кажется понял у ТС в базе 1с-ки есть таблицы созданные не в 1С
если это так, руки оборвать тому кто такое придумал.
(87) а что вы с этой структурой делать будете? )
ну получили, узнали таблицы. (78) прочитайте еще раз ))
(90) все зависит от задачи. Я из реальных задач встречал только необходимость для 300.000 документов заполнить вновь созданный реквизит неким значением (простым) отличным от значения по умолчанию.
Через 1С это обещало делаться порядка 3х дней. Прямым запросом сделалась какое-то не значительное время.
А так, к примеру, при большом желании, можно получить данные какого либо документа. Причем никто не мешает вместо ссылок на ссылочные типы данных получить их представления из соответствующих таблиц.
Сразу скажу, сам этого не делал, но и серьезных проблем вроде как быть не должно (при известной структуре данных)
Прямые запросы к родным данным базы 1С v8 не нужны, т.к. штатные запросы имеют вполне достаточную функциональность.
Запросы к чужим данным отлично работают через ADO.
(89) еще раз:
в РБД связь таблиц - поле перекрывает поле, поле одной таблицы - связь с полем другой таблицы (не ячейки!). реальные данные получаете почти сразу (именно за счет избыточности многих таблиц - добавляются "лищние" дуболяжи полей, зато поиск и запрос - мгновенно ))
1с: связь между таблицами - ячейка-ячейка: прыгаете туда-сюда, и ищете в этом клубке реальные данные. Реальные данные получают не по индексу поля/таблицы, а сначала найдя значения ячейки, расшифровав его, потом следующее, и далее.
если по-простому ))
вот с записью могут быть проблемы т.к. необходимо обеспечить ссылочную целостность БД, да и вообще не нарушить какие-нибудь внутренние механизмы. А вот читать. не должно быть особых проблем (ну кроме замороченной структуры данных)
(91) если только все доки будут одинаковы ))
>> А так, к примеру, при большом желании, можно получить данные какого либо документа.
(97) дело не в SQL, дело в структур хранения данных 1с.
а SQL так, как коробка для кубиков используется, где кубиками - рулит 1с-сервер.
(98) скаже так, данные есть? есть. информация о структуре есть? есть. Руки есть? есть. Растут из нужного места? да.
Остальное решаемо :) Главное чтобы была соответствующая мотивация.
Как то возникла ситуация, когда в справочник, с включенной проверкой на уникальность кода, из вне приходят элементы с такими же кодами. Отключать проверку нельзя. Пришлось делать затычку.
Подключение к SQL в общем то широко описано:
Код 1C v 8.х
Сервер и БД можно получить и программно, но муторно. Эти данные можно взять из свойств БД на сервере 1С.
Название таблицы и полей в SQL можно получить с помощью команды 1С:
Цитата
Глобальный контекст
ПолучитьСтруктуруХраненияБазыДанных (GetDBStorageStructureInfo)
Синтаксис:
ПолучитьСтруктуруХраненияБазыДанных(, )
Параметры:
(необязательный)
Тип: Массив. Массив имен объектов метаданных или массив объектов метаданных, для которых требуется получить структуру таблиц базы данных.
(необязательный)
Тип: Булево. Определяет, в каких терминах выдается информация о структуре хранения.
Истина - в терминах СУБД
Ложь - в терминах SDBL.
Значение по умолчанию: Ложь
Возвращаемое значение:
Тип: ТаблицаЗначений. Возвращает таблицу значений с описаниями структуры таблиц, индексов и полей базы данных в терминах SDBL или используемой СУБД, в зависимости от значения параметра "Имена базы данных".
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Таблица значений включает следующие колонки:
ИмяТаблицыХранения(StorageTableName) – имя таблицы SDBL или базы данных;
ИмяТаблицы(TableName) – имя таблицы в терминах языка запросов (для тех у кого оно есть);
Метаданные(Metadata) – полное имя объекта метаданных;
.
Дальше нам нужно новый элемент справочника все ж таки записать, ну например :
Код 1C v 8.х
Все, делаем подмену.
Код 1C v 8.х
Похожие FAQ
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Как то возникла ситуация, когда в справочник, с включенной проверкой на уникальность кода, из вне приходят элементы с такими же кодами. Отключать проверку нельзя. Пришлось делать затычку.
Подключение к SQL в общем то широко описано:
Код 1C v 8.х
Сервер и БД можно получить и программно, но муторно. Эти данные можно взять из свойств БД на сервере 1С.
Название таблицы и полей в SQL можно получить с помощью команды 1С:
Цитата
Глобальный контекст
ПолучитьСтруктуруХраненияБазыДанных (GetDBStorageStructureInfo)
Синтаксис:
ПолучитьСтруктуруХраненияБазыДанных(, )
Параметры:
(необязательный)
Тип: Массив. Массив имен объектов метаданных или массив объектов метаданных, для которых требуется получить структуру таблиц базы данных.
(необязательный)
Тип: Булево. Определяет, в каких терминах выдается информация о структуре хранения.
Истина - в терминах СУБД
Ложь - в терминах SDBL.
Значение по умолчанию: Ложь
Возвращаемое значение:
Тип: ТаблицаЗначений. Возвращает таблицу значений с описаниями структуры таблиц, индексов и полей базы данных в терминах SDBL или используемой СУБД, в зависимости от значения параметра "Имена базы данных".
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Таблица значений включает следующие колонки:
ИмяТаблицыХранения(StorageTableName) – имя таблицы SDBL или базы данных;
ИмяТаблицы(TableName) – имя таблицы в терминах языка запросов (для тех у кого оно есть);
Метаданные(Metadata) – полное имя объекта метаданных;
.
Дальше нам нужно новый элемент справочника все ж таки записать, ну например :
Код 1C v 8.х
Все, делаем подмену.
Код 1C v 8.х
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени PostgreSQL: установка, настройка, обслуживание 11
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц Посмотреть все результаты поиска похожих
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Что такое менеджер временных таблиц и как с ним работать? 11
В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц . Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продо Объектная модель схемы запроса 5
Периодически во встроенном языке возникает необходимость изменения текста запроса в зависимости от разных алгоритмических условий. Раньше подобная задача решалась путем непосредственного формирования нужного текста запроса в виде строки. А это не вс Как в запросе объединить несколько значений в один столбец отобрав по условию? 1
Бывают ситуации, особенно когда формируешь отчеты по проводкам, где надо вывести отчет по одному типу значений и эти значения могут быть в разных колонках регистра. В примере ниже, необходимо собрать отчет в разбивке по Номенклатурным группам. Про Курс по разработке и оптимизации запросов в 1С (Часть 1) 0
Часть 1. Основные конструкции языка запросов и их назначение • Назначение языка запросов • Структура запроса • Основные секции запроса и их назначение • Группировка результатов запроса • Фильтрация результатов запроса • Объединения и соединени Посмотреть все в категории Запросы
В одной из прошлых статей мы рассматривали вопросы мониторинга SQL Server в контексте работы с платформой 1С. И это правильно, ведь мониторинг СУБД является залогом стабильной работы информационной системы и всей компании.
Но что, если Вы как консультант / эксперт только пришли к новому клиенту / на новое место работы. Мониторинга там нет, но нужно понять, разобраться что там вообще происходит. Разобраться что за сервер вообще установлен, делаются ли бэкапы, какие базы развернуты, все ли в порядке с обслуживанием и так далее.
Сегодня мы рассмотрим подобные вопросы. Начнем знакомство с сервером с помощью простых запросов, а остановимся на примерах поинтереснее.
Скриптов достаточно?
Думаете, что все возникающие вопросы с СУБД можно решить скриптами? Многие вопросы, но точно не все!
Например, полноценный мониторинг сервера и сбор счетчиков производительности средствами СУБД точно не реализовать, ведь данные нужно не просто собирать, но и обрабатывать, компоновать, визуализировать и, в конечном, счете как-то интерпретировать.
Конечно, SQL Server может решить все перечисленные задачи, ведь даже счетчики производительности операционной системы с его помощью можно собирать! Но это не всегда возможно, ведь тогда надо держать его установленным на всех серверах, даже которые к СУБД не относятся. А про сопровождение такого решения я вообще молчу.
Поэтому сделаю важное уточнение - с помощью предлагаемого набора скриптов решить все задачи с настройкой и мониторингом СУБД невозможно! А вот получить первое представление о ее состоянии, и поверхностную информацию о проблемах - самое то!
Ближе к делу
Меньше слов - больше T-SQL скриптов!
Знакомимся с сервером
На первом этапе всегда было бы полезно узнать следующую информацию.
Начнем с основной информации.
Теперь мы знаем какая версия SQL Server используется, имя экземпляра и сервера.
Хотя есть подозрение, что имя экземпляра Вы знали еще до подключения к нему :)
Версия СУБД может пригодиться для определения какие возможности у нее есть, известные баги и др.
В большинстве вопросов диагностики производительности и стабильности важно знать сколько времени уже запущен экземпляр SQL Server.
Здесь мы получили имя сервера, дату его запуска, а также продолжительность работы сервера в днях и секундах. Для этого мы использовали дату создания базы TempDB, которая создается в момент запуска SQL Server.
Почему эта информация так важна? Сам SQL Server собирает статистику различных показателей (как используются индексы, информацию о недостающих индексах, планы запросов и др.). Чем дольше сервер работает, тем точнее собранная статистика.
Представьте, что Вы запустили сервер 5 минут назад, смотрите что информации о недостающих индексов нет. Правильно ли было полагаться на эти данные, которые были собраны за 5 минут?
Еще одним очень важным моментом может быть количество активных соединений со SQL Server.
Эта информация может пригодиться в следующих случаях:
- Отслеживание количества соединений для контроля лицензионной "чистоты".
- Для контроля подключения к базе данных.
- Для сбора статистики интенсивности работы с СУБД.
- Расследование проблем "зависших" соединений.
- И др.
Все просто, не так ли?
После этого мы можем двигаться дальше.
Псс, бэкапы есть?
Второй вопрос - что там у Вас с резервным копированием.
Резервное копирование - очень важно. Об этом уже так много было сказано, но случаев когда им пренебрегают до сих пор очень много. Узнаем дату последнего бэкапа тех баз, которые расположены на изучаемом сервере.
Кроме этого, мы можем узнать куда последние бэкапы сохранялись (будь то какой-либо каталог или виртуальное устройство для сохранения на ленту, или что-то другое).
Теперь мы знаем есть ли настроенное резервное копирование. Ну или хотя бы ручной запуск бэкапирования.
Резервное бэкапирование не настроено? Тогда пора заняться этим как можно скорее.
Груз баз данных
Базы бывают разные: маленькие, средние, большие, а также неизвестного размера :) Последняя категория - самая страшная, ведь неизвестность не принесет ничего хорошего. Давайте же узнаем с чем мы имеем дело.
Для начала узнаем список всех баз на сервере. Для этого есть несколько способов.
Все способы дают примерно ту же самую информацию, но с разной детализацией.
Сам по себе список баз даст мало полезного. Давайте посмотрим что там с их размером.
Размер базы в мегабайтах.
После того, как стало известно о размере баз данных, можно посмотреть сколько место фактически используется.
Если доля неиспользованного места в базе высокая, то это может стать поводом для проведения шринка файлов данных базы. Но совсем не обязательно!
Еще может возникнуть вопрос где же эти базы хранятся.
Расположение файлов также можно определить несколькими способами. Вот два из них.
Может пригодиться, если планируется изменять конфигурацию хранилища данных и по другим админским вопросам.
Но что скрывается за этими общими цифрами?
Размер таблиц можно оценивать по количеству записей (это, конечно, менее точный способ, т.к. не учитывает сами данные) или непосредственно по занимаемому ими месту.
Самый простой способ определения количества записей - через обычное сканирование таблиц. Этот же способ наименее оптимальный с точки зрения производительности.
Наиболее оптимальный путь - это использование кластерного индекса.
Другой похожий метод - это использование DMV "dm_db_partition_stats".
Первый способ доступен и из синтаксиса запросов платформы 1С.
Остальные - только с помощью T-SQL.
Количество записей - это хорошо. Но узнать размер хранимых данных в таблицах чаще всего более предпочтительный вариант.
Скрипт дает информацию о размере зарезервированного места, размере данных и индексов, а также сколько свободного места из зарезервированного осталось доступно. Количество записей также доступно и подсчитывается с помощью DMV "dm_db_partition_stats".
Теперь мы знаем кто и как занимает место в исследуемых базах данных.
Отлично, теперь мы уже имеем представление о сервере, резервном копировании и базах данных, которые здесь находятся. Можно перейти к вопросам эффективности работы СУБД.
Что там с индексами
Состояние индексов и их правильное построение в базе - залог эффективной работы запросов и приемлемого быстродействия. Проведем исследование индексов в базах данных.
Составим список таблиц и их индексов.
Много ли индексов в Вашей базе данных?
Теперь можно посмотреть какие индексы полезные.
Индексы имеют свои издержки на обслуживание. Это и занимаемое место, и увеличение времени записи, а также потребность их реорганизации / ребилда после некоторого периода использования. Поэтому было бы не плохо понять какие индексы по-настоящему нужны. Для этого и нужна статистика использования индексов.
Этим скриптом Вы можете получить информацию о количестве операций поиска, сканирования и некоторых других операций на индексах. В итоге можно составить список тех объектов, которых из базы можно удалить.
Для платформы 1С удаление неиспользуемых индексов штатными средствами не всегда возможно. Но если сильно захотеть.
Кроме этого, можно составить список индексов, которые имеют высокие издержки при использовании. Возможно, это "тяжелые" индексы, которые созданы на часто обновляемых таблицах или др. варианты.
Что ж, информация об использовании индексов у нас есть. Мы можем понять какие индексы избыточны и что-то с ними сделать. Но чаще всего проблема вовсе не в избыточности индексов, а в их недостаточности.
SQL Server на столько хорош, что может поделиться информацией об отсутствующих индексах, наличие которых бы смогло повысить эффективность работы запросов.
Результат - это таблица, в которой представлена информация о таблице, списке полей для индекса, команду T-SQL для создания этого индекса, а также оценка влияния на производительность предполагаемого индекса и статистика запросов, которые этот индекс будут использовать.
Информация очень ценная. Конечно, информация не должна восприниматься как истина. Нужно разумно подходить к тому, что предлагает SQL Server, ведь контекст запросов ему неизвестен. Многие индексы можно создать средствами платформы 1С (хотя бы примерно), но есть и те, что просто так в базу не добавить. В этом случае Вам может помочь информация из статьи "Создаем свои индексы для баз 1С. Со своей структурой и настройками!".
Еще одним важным показателем состояния индексов является процент фрагментации.
Чем выше процент фрагментации индекса в базе, тем меньше его эффективность. Почему? Все просто - части индекса разбросаны по файлу базы данных и для использования индекса все эти части нужно собрать. Чем больше фрагментация, тем сложнее это сделать. В случаях, когда процент фрагментации большой, СУБД может вообще отказаться от использования такого индекса.
Скриптом выше можно посмотреть список индексов, процент фрагментации которых выше 30%. Далее нужно будет подумать об исправлении / улучшении обслуживания индексов.
Вы знаете, что делать с индексами дальше!
Статистику бы проверить
С индексами разобрались, но для их корректной работы очень важно состояние статистики базы данных.
Для проверки состояния статистики можно использовать два скрипта. Первый с общей информацией.
Так мы узнаем список таблиц их объекты статистики, а также количество изменений с момента последнего обновления статистики и дату последнего обновления. Проверьте, есть ли в Вашей базе статистика, которая не обслуживалась много лет или месяцев? В этом плане часто можно увидеть сюрпризы.
Для расследования конкретных проблем с производительностью в части статистики можно использовать более подробный диагностический скрипт.
Если кратко, то так мы можем получить дополнительную информацию об объектах статистики, гистограмме распределения, плотности и многое другое. Обычно эту информацию не приходится использовать, только в каких-либо сложных расследованиях или экспериментах.
Нашли проблему в обслуживании? Обслужите статистику!
Производительность - наше все!
На финал оставим скрипты для диагностики производительности. На самом деле очень много различных подходов для анализа проблем производительности. Как было сказано в начале статьи, только скриптами не всегда удается найти причину проблем и нужен полноценный мониторинг. Но общее направление для расследования понять точно можно.
Лакмусовой бумажкой работы СУБД является статистика по ожиданиям, с помощью которой можно понять что же не так со SQL Server.
Запрос покажет что именно ожидает SQL Server и даст ссылку на информацию о данном типе ожидания. Отличная статья на эту тему (там же и был взят скрипт) "Paul Randal.
Далее можно посмотреть на статистику использования процессорных ресурсов и дисковой подсистемы по базам.
Для CPU скрипт такой.
Для дисков ниже.
Примерное представление о "тяжелых" системах это позволяет получить.
Дальнейшее расследование и действия сильно зависит от полученной информации на данном этапе. Далее можно:
- Настроить мониторинг SQL Server'а (как внутренних показателей СУБД, так и счетчиков производительности).
- С помощью отчета "Просмотр и анализ структуры базы данных (отчет на СКД)" на платформе 1С анализировать информацию о базе данных в привычном виде.
И думать, работать дальше :)
Пока что все
В статье нет готового рецепта для решения всех проблем. Лишь скрипты. Скрипты для начала знакомства с сервером СУБД, получения узкой информации и получения сведений о потенциальных проблемах.
Дальше все зависит только от Вас!
"А как же PostgreSQL?!", - спросите Вы. Сейчас это "хайповая" СУБД, и возможно она станет на первое место по использованию в будущем. Думаю, мы обратимся к ней в следующих публикациях. Жаль, что ее инструменты диагностики не такие развитые как у SQL Server, но все ведь может поменяться.
Читайте также: