Секционирование в PostgreSQL 12

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

Администрирование - Администрирование СУБД

PostgreSQL секционирование партиции партицирование секции

Протестируем новый функционал секционирования в PG12.

Важно

  Данный материал не несет рекомендательный характер, а только ознакомительный. Все, что будет описано ниже, это следствие свободного времени на самоизоляции и желания познать новое. Еще две недели назад максимум, что я делал в PostgreSQL это правил настройки согласно различным рекомендациям в интернете. Следуя из выше описанного, в данной статье могут присутствовать ошибки и работы на рабочей базе могут привести к необратимым последствиям. Цель публикации осветить новый функционал в PG12. Надеюсь, появятся новые статьи от более опытных администраторов. (например: YPermitin).

Пояснения и определения

  Вкратце для тех, кто не знает, что такое секционирование и для чего оно необходимо. Секционированием данных называется разбиение одной большой логической таблицы на несколько меньших физических секций. Какая польза от секционирования?

  • При разделении таблицы на несколько мелких, можно актуальные данные выносить на отдельный жесткий диск.
  • Несколько раз в день принудительно просчитывать по ним статистику.
  • Если есть необходимость перестроить индекс в технологическое окно, то можно сделать только на данных, которые чаще используются.(Хотя с выходом 12 версии это можно делать не в монопольном режиме прям на рабочей базе.).
  • Закрыть на уровне СУБД редактирование таблиц старых периодов и 100% быть уверенным, что пользователи не отредактируют данные за прошлые года.

  Где-то мною было прочитано, что секционирование актуально когда размер таблицы около 30 ГБ, так что большинству изложенная ниже информацию вряд ли пригодится (мне кстати  тоже в работе это не понадобится).

  Задумка заключается в следующем: в чистой базе мы создадим два идентичных оборотных регистра накопления. Таблицу одного из регистров разобьем на более мелкие секции. Наполним таблицу данными (несколько десятков миллионов строк), а затем сравним скорости записи и чтения по этим регистрам. Постараюсь описать выполняемые мною действия максимально подробно, так как опыта в написании статей нет, может получится слишком объемно :)

 

Используемые инструменты и материалы

Параметры PostgreSQL

shared_buffers  1 GB
temp_buffers 256 MB
work_mem 256 MB
maintenance_work_mem 1 GB
wal_sync_method open_datasync
max_wal_size  10 GB
effective_cache_size 4 GB
autovacuum_max_workers  2
autovacuum_vacuum_cost_limit 800
autovacuum_vacuum_scale_factor 0.01
autovacuum_analyze_scale_factor 0.01
max_locks_per_transaction 512
enable_partition_pruning  on  
bytea_output 'hex'

 

Начнем

Оглавление

  1. Создание базы 1с для теста
  2. Определение структуры секционирования
  3. Написания и выполнение скриптов 

    4. Тестирование произведенной модернизации

Создание базы 1с для теста

   В новой базе создадим 2 оборотных регистра накопления.  Регистры будут иметь следующую структуру:

 

  В первом регистре в измерениях "Подразделение" и "Поле" установим признак "Индексировать", во втором этого делать не будем, так-как индексы будем настраивать в PostgreSQL. Далее создадим 5 элементов в справочнике "Подразделение", 100 элементов "Поля" и 20 Элементов "Статья затрат". Работая в сфере "Сельского хозяйства", мне проще привести пример из данной области. В данных регистрах будем собирать затраты рабочих бригад на каждое поле.

   Следующим шагом будет создание документов для формирования движений по этим регистрам. 

 
 Модуль документов "НакладнаяТиповой" и "НакладнаяСекционированный"

 

   Подготовим процедуру наполнения данными:

 
 Код наполнения базы данными
 
Определение структуры секционирования

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

  1. По диапазонам. В данном случае удобно разбивать по датам. Например, создать отдельную таблицу на каждый месяц или год. Такая таблица создается следующей конструкцией:
     
    Пример SQL команды

     

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

     
     Пример SQL команды

     

  3. По хешу. Честно признаюсь не разобрался. На данном этапе для меня все сложно и запутанно, а хороших примеров в интернете не нашел. Надеюсь будет время и разберусь.

  Давайте воспользуемся первыми двумя способами и спроектируем нашу таблицу. Идея такова:для текущего и прошлого года на каждый календарный месяц создаем отдельную таблицу. Так же создаем одну большую таблицу в которую будут попадать все данные до 2019 года. Итого 25 таблиц. Уже не плохо. В теории если мы будем формировать месячный отчет, данные уже должны быстрее выбираться. Но мы пойдем дальше и создадим в каждой такой таблице секцию на подразделения имеющиеся в базе. Еще нам нужно будет создать секцию для иных подразделений, которые могут быть созданы в базе в процессе работы. Итого 6 секций для каждой таблицы периодов. Подсчитываем 25*6 =150 таблиц.

 

 

  С построением таблиц разобрались, еще у нас есть индексы. Заходим в обработку со структурой нашей базы и смотрим в каких таблицах расположены наши данные:

 

  Запоминаем, что  записи типового регистра будут лежать в таблице _AccumRg40, а записи секционированного регистра в таблице _AccumRg57. Идем дальше смотрим поля типового регистра и индексы

   Узнаем, что имеется 2 служебных индекса и 2 индекса, которые мы определили сами на первом этапе нашей работы. Теперь смотрим эту же информацию по секционированному регистру.

 

   Тут для нас интересны следующие поля: _Period по нему будем строить диапазонные секции, _Fld58RRef (Подразделение) по нему будем строить списочные секции, а также создавать индекс, _Fld59RRef(поле)-по нему будем создавать индекс. Правильнее было бы объединить  поля _Fld58RRef  и _Fld59RRef в один индекс, но так как мы будем сравнивать скорости работы, то для полноты картины, честно будет иметь по 4 индекса в каждом регистре.

   Заходим в PgAdmin находим таблицу типового регистра (_accumrg40), разворачиваем индексы и на вкладке "SQL" смотрим команды, которые эти индексы создают.  

 

 
 Индексы таблицы _AccumRg40

 

   Теперь посмотрим на  индексы таблицы _accumrg57 и составим примерный вид недостающих двух индексов по подобию из таблицы _AccumRg40

 

 
 Индексы таблицы _accumrg57 

  

   PostgreSQL может наследовать индексы. Таким образом, если на главную таблицу создадим индекс, а потом будем создавать секции, то к этим секциям создастся индекс автоматически.  Одно важное условие: в таком индексе должны присутствовать поля по которым происходит секционирование. В нашем случает это _period (дата записи) и _fld58rref (подразделение). Смотрим на наши индексы и понимаем, что в данное определение попадает только один индекс под номером 4. Его можно создать на главной таблице, остальные придется создавать на все 150 таблиц. Для лучшего восприятия приведу скрин из уже готовой таблицы (мне лень строить схемы, да и не умею этого красиво делать)

 

 

   Красным выделен индекс, который мы будем создавать у главной таблицы и он наследуются  остальными. Зеленым, индексы созданные для каждой таблицы вручную. Дальше самое интересное, начинаем все это воплощать в жизнь.

 

Написания и выполнение скриптов

 

   К большому сожалению переделать существующую таблицу в секционированную нельзя, поэтому нам нужно будет создать таблицу _accumrg57_copy,  перенести в нее данные из _accumrg57,  удалить _accumrg57 и переименовать _accumrg57_copy в _accumrg57.

 

 

Создаем таблицу _accumrg57_copy:

Смотрим в PgAdmin на вкладке "SQL" команду создания таблицы _accumrg57.

CREATE TABLE public._accumrg57
(
    _period timestamp without time zone NOT NULL,
    _recorderrref bytea NOT NULL,
    _lineno numeric(9,0) NOT NULL,
    _active boolean NOT NULL,
    _fld58rref bytea NOT NULL,
    _fld59rref bytea NOT NULL,
    _fld60rref bytea NOT NULL,
    _fld61 numeric(15,2) NOT NULL
) 
TABLESPACE pg_default;

ALTER TABLE public._accumrg57
    OWNER to postgres;

Составляем команду и выполняем:

 

CREATE TABLE public._accumrg57_copy
	(
		_period timestamp without time zone NOT NULL,
		_recorderrref bytea NOT NULL,
		_lineno numeric(9,0) NOT NULL,
		_active boolean NOT NULL,
		_fld58rref bytea NOT NULL,
		_fld59rref bytea NOT NULL,
		_fld60rref bytea NOT NULL,
		_fld61 numeric(15,2) NOT NULL	
)PARTITION	BY RANGE (_period);

ALTER TABLE public._accumrg57_copy
    OWNER to postgres;

Так как главная таблица физически не содержит данных, TABLESPACE не указываем.

PARTITION  BY RANGE (_period)  указываем, что деление этой таблицы происходит по колонке _period

 

 

удаляем таблицу _accumrg57, переименовываем _accumrg57_copy и создаем первый индекс на все таблицу: 

 

DROP TABLE public._accumrg57;	
	
ALTER TABLE public._accumrg57_copy rename to _accumrg57;

CREATE UNIQUE INDEX _accumrg57_1
    ON public._accumrg57 USING btree
		(_fld58rref ASC NULLS LAST,  _period ASC NULLS LAST, _recorderrref ASC NULLS LAST, _lineno ASC NULLS LAST);

   Тут надо понимать, у меня чистая база и я могу сразу удалить стандартную таблицу. Если бы таблица была с данными, то эта часть кода выполнялась последней и перед этим была бы команда перенести данные из таблицы _accumrg57 в таблицу _accumrg57_copy.  Вообще если проводить такие работы на рабочей базе и таблица в чистом виде без индексов размером порядка 50 Гб, то возникают проблемы. Перенос данных из таблицы в таблицу может занять больше суток. Необходимо будет частями осуществлять перенос при помощи команд ALTER TALE, растягивая процесс на несколько технологических окон, но описать все это нужна отдельная статья. 

     

 

   Дальше нам понадобятся циклы и динамическое создание таблиц с неопределенными изначально именами. Это нельзя сделать просто командами, поэтому будем использовать процедурный язык. Вообще в PostgreSQL их поддерживается несколько, но по умолчанию в системе есть только один "PL/pgSQL". Его и будем использовать (Если будет время, попробую все тоже самое сделать на питоне и обновить статью). Проблема заключается в том, что дальше все идет в одной процедуре и строчек кода не 10 штук. Я долго думал как это выложить так, чтобы все прокомментировать и объяснить. Решил выложить весь код сразу, а затем разобью все на блоки и прокомментирую.

 

 
 Процедура на языке "PL/pgSQL"

 

   Выполнение кода на каком-либо языке происходит так:

DO $$    

--начало процедуры. Еще тут указывают на каком языке будут процедура. Для "PL/pgSQL" можно ничего не указывать, он используется по умолчанию     
 
DECLARE   

  --объявляются все используемые переменные

BEGIN
--код программы

END $$;   --конец процедуры

Теперь все блоки по порядку. Переменные

 

DECLARE
	mviews RECORD;           -- в нее будем помещать список подразделений
	name_table text;         -- переменная для хранения имени таблицы, которую будем создавать
	name_endex text;         -- переменная для хранения индекса таблицы, который будем создавать
	sql_q text;              -- текст SQL команды, который будем выполнять
	id_podr bytea;           -- найденное подразделение из переменной mviews типа bytea
	nach_goda timestamp;     -- Переменные для работы с датами
	nach_tek_mes timestamp;
	nach_sled_mes timestamp;
	name_table_per text;     -- переменная для хранения имени таблицы, которую будем создавать

 

Создаем таблицу с данными до 2019 года

 

 

 
 Таблица "_accumrg57_min_2019_1_1"

 

1) CURRENT_DATE - возвращает текущую дату (у меня 02.02.2020), аналог "ТекущаяДата()"

2)date_trunc('years',CURRENT_DATE) возвращает начало года (01.01.2020), аналог "НачалоГода()"

3) - interval '1 year'    отнимает один год. В итоге в переменную nach_goda запишем 01.01.2019

4) В переменную name_table_per запишем название нашей таблицы, которую будем создавать. символами || обозначается соединение строки. 

получаем "_accumrg57_min_2019_1_1".

5) В переменную sql_q составляем команду создания таблицы

6) EXECUTE sql_q;   выполняем команду. Это аналог команды "Выполнить" в 1с

Если все переменные перевести в строку, то в чистом виде получится следующая SQL команда

CREATE TABLE public._accumrg57_min_2019_1_1 PARTITION OF public._accumrg57
    FOR VALUES FROM (MINVALUE) TO ('2019-01-01 00:00:00')
    PARTITION BY LIST (_fld58rref);

MINVALUE -специальный оператор указывающий на все значения, которые меньше значения в правой части. В нашем случае это все, что меньше '2019-01-01 00:00:00'

PARTITION BY LIST (_fld58rref);  задаем, что данная таблица в свою очередь еще будет разбита на секции в разрезе колонки "Подразделение".

 

 Создадим таблицу, в которую будут попадать данные до 2019 года с подразделениями по умолчанию

 
  Таблица _accumrg57_min_2019_1_1_default 

 

  Тут мы указываем, что таблица _accumrg57_min_2019_1_1_default это секция таблицы "_accumrg57_min_2019_1_1", созданной ранее. Параметр DEFAULT указывает, что это таблица по умолчанию для всех записей. Если мы больше не будем создавать секций, то все данные за период до 2019 года, будут храниться в ней. 

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

 
 Индексы Таблицы  _accumrg57_min_2019_1_1_default

 

    Если мы выполним эти команды, в PgAdmin увидим следующую картину

    Красным, индекс созданный автоматически от главной таблицы. Зеленым, те, что мы создали кодом. (таблиц с именем 00000001 и т.д. не будет, просто скриншот из готового решения.)

 

Создаем таблицы на каждое подразделение, что присутствуют в базе, для данных до 2019 года, а так же индексы на каждую такую таблицу

 
 Разбираемый блок
Тут присутствует цикл FOR ..In это полный аналог цикла в 1с  "Для Каждого из". 
    FOR mviews IN

			Select _Code, _idrref 
			from
			public._reference34

   Запросом мы выбираем все подразделения из базы. _reference34 название таблицы где хранится справочник подразделения. Можно посмотреть в обработке по структуре базы. Все реквизиты справочника не нужны, только код и ссылка.

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

 

   Каждая строчка этой таблицы помещается в переменную mviews и уже с ней мы работаем в теле цикла. 

 
 В цикле создаем таблицы

 

  • id_podr:='decode('''||encode(mviews._idrref,'hex')||''',''hex''';

Данным участком кода мы переводим байтовые значения в строку, чтобы можно было сформировать команду для метода EXECUTE, затем в команде при помощи метода decode снова переводим в тип Bytea. Если не применять функции encode и decode, то PostgreSQL выдает данные в примерно таком виде "\\252\\0328\\325G\\032\\024\\\\\\021\\352\\220\\354-\\324\\227\\321".  Я пытался сформировать запрос  

CREATE TABLE public._accumrg57_min_2019_1_1_00000000005 PARTITION OF public._accumrg57_min_2019_1_1
    FOR VALUES IN ('\\252\\0328\\325G\\032\\024\\\\\\021\\352\\220\\354-\\324\\227\\321')
TABLESPACE pg_default;

, но выходила ошибка кодировки. Как я понял имелся какой-то символ не совместимый с UTF-8. Честно потратив 2 часа на разбирательства решил применить костыль с преобразованием данных в HEX формат и обратно.

  • name_table         = формируем имя создаваемой таблицы "имя родительской таблицы периода" + код справочник. Например:

_accumrg57_min_2019_1_1_00000000001

  • sql_q                  = переменная с  SQL командой
  • mviews._idrref  = ссылка на справочник подразделение. 

 

SQL   в чистом виде вместо переменных  для первого подразделения

CREATE TABLE public._accumrg57_min_2019_1_1_00000000001 PARTITION OF public._accumrg57_min_2019_1_1
    FOR VALUES IN (decode('aa1a38d5471a145c11ea90ec2dd497cd','hex'))
TABLESPACE pg_default;

    Тут же создаем 3 индекса на каждую секцию.

 
 Индексы таблиц

  В чистом SQL будет выглядеть так

CREATE UNIQUE INDEX _accumrg57_min_2019_1_1_00000000001_1
    ON public._accumrg57_min_2019_1_1_00000000001 USING btree
    (_recorderrref ASC NULLS LAST, _lineno ASC NULLS LAST)
    TABLESPACE pg_default;


CREATE UNIQUE INDEX _accumrg57_min_2019_1_1_00000000001_2
    ON public._accumrg57_min_2019_1_1_00000000001 USING btree
    (_fld59rref ASC NULLS LAST, _period ASC NULLS LAST, _recorderrref ASC NULLS LAST, _lineno ASC NULLS LAST)
    TABLESPACE pg_default;

CREATE UNIQUE INDEX _accumrg57_min_2019_1_1_00000000001_3
    ON public._accumrg57_min_2019_1_1_00000000001 USING btree
    (_period ASC NULLS LAST, _recorderrref ASC NULLS LAST, _lineno ASC NULLS LAST)
    TABLESPACE pg_default;

   Если выполним  код на данном этапе, то в базе будет 1 секция _accumrg57_min_2019_1_1 к основной таблице _accumrg57, и 6 секций к таблице _accumrg57_min_2019_1_1 каждая со своими индексами.

 

   Создание секций на каждый месяц за текущий и прошлый год.

 
 Разбираемый блок кода

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


//определяем начальную дату отсчета. 01.01.2019
Цикл фиксировано 24 раза    //на каждый месяц за 2 года

  //Формируем имя секции периода следующего вида
  //"ИмяГлавнойТаблицы_НачМес_НачСледМесяца" например:"_accumrg57_2019_1_1_2019_2_1"

  //Создаем секцию на месяц

  //создаем секцию по умолчанию для подразделений
  //создаем 3 индекса к ней

      Цикл на каждое подразделение
     
        //Формируем имя таблицы как "ИмяТаблицыПериода_+кодСправочника"

        //Создаем таблицу
        //Создаем 3 индекса к ней.

     КонецЦикла на каждое подразделение

КонецЦикла фиксировано 24 раза    //на каждый месяц за 2 года

   

После всех действий имеем готовую разбитую таблицу нашего регистра.

 

Тестирование произведенной модернизации

   Наполняем нашу базу данными, при помощи средств, что создавали ранее. Я забивал данные только за 2019 год. Через несколько часов проведения документов, решил посмотреть, что получается. Выполняем следующую команду

 
 Размер таблиц

 

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

Решил перепровести несколько раз по одному  документу и сравнить скорость выполнения строк. Напомню количество записей одного документа 310 000.

Движения.ЗатратыСекционированные.Записать();

Движения.ЗатратыТиповой.Записать();

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

 
 Запросы за 1 месяц

 

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

 

 
 Запросы по индексированному измерению регистра.


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

 
 Запрос с объединением данных

Тут я много замеров не делал, принцип был и так виден

  Ложка дегтя во всем этом, так это анализ запросов где будет участвовать такая таблица. Тут без комментариев.

 

Заключение

   Пофантазируем и подумаем, что можно улучшить и куда развиться.

  1. Не делать все одним большим методом. Сохранить в базе процедуры создания таблиц и обращаться к ним, передавая названия таблиц в качестве параметра.
  2. Написать скрипты для создания новых секций, когда будет приближаться новый календарный год.
  3. Написать триггер, чтобы при реструктуризации базы наш регистр оставался прежним. 
  4. Используя FDW вынести архивные периоды на отдельный сервер. Например текущий и прошлый года держать на главном сервере, а все остальное на более слабом. Скорость работы со старым периодом конечно упадет, но не знаю на сколько. Можно будет поковыряться. Шардирование PostgreSQL само по себе интересное дело, а применить его в 1С тем более.
  5. В конечном счете все это можно выполнять из самой 1с, не трогая PgAdmin. В теории можно создать конфигурацию, в которой можно визуально проектировать секции, а потом отправить команды на секционирование таблиц. Например вот так в 1с выглядит результат запроса в SQL по размерам таблиц, который мы использовали в статье

 

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. awk 714 21.05.20 08:21 Сейчас в теме
По хешу. Честно признаюсь не разобрался. На данном этапе для меня все сложно и запутанно, а хороших примеров в интернете не нашел. Надеюсь будет время и разберусь.


Там все просто. Есть 100 шариков и 12 корзин. Вам шарики надо разложить по корзинам. Вы вычисляете номер шарика (хэш функция) и берете остаток от деления этого номера на 12 - получая номер корзины. В случае с субд шарики это кортежи, а корзины - секции.

Задумка заключается в следующем: в чистой базе мы создадим два идентичных оборотных регистра накопления. Таблицу одного из регистров разобьем на более мелкие секции. Наполним таблицу данными (несколько десятков миллионов строк), а затем сравним скорости записи и чтения по этим регистрам. Постараюсь описать выполняемые мною действия максимально подробно, так как опыта в написании статей нет, может получится слишком объемно :)


Задумка называется: "Нам не надо что бы работало, нам надо что бы ты зае...ся". Сравнивать тут нечего. Выводы то же на этом не сделать. Но для как разбить - подойдет. За что и поставил плюс.

Компьютер: Windows 10
Это великолепно. Меня всегда поражали люди с PG на виндах.

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

Какая польза от секционирования?
Блин, в википедии написано: "Используется в целях повышения управляемости, производительности и доступности для больших баз данных." - кратко и по делу.
obmanOZ; Painted; +2 1 Ответить
3. D_astana 20 21.05.20 09:23 Сейчас в теме
(1)За разъяснения по хэшу спасибо.
2. D_astana 20 21.05.20 09:21 Сейчас в теме
Задумка называется: "Нам не надо что бы работало, нам надо что бы ты зае...ся". Сравнивать тут нечего. Выводы то же на этом не сделать..


Я изначально написал, что не работаю с большими данными. Был бы опыт привел бы пример практической реализации.

Это великолепно. Меня всегда поражали люди с PG на виндах.


Меня всегда поражали люди, которые думают, что для обслуживания баз до 10 ГБ, обязательно надо учить линукс.

Прочитав этот абзац, у меня задергался глаз и рука самопроизвольно потянулась к минусу. Таблица в субд - это логическая абстракция.


Единственная строка в статье, которую я взял на сайте у ребят из postgrespro.ru, https://postgrespro.ru/docs/postgrespro/12/ddl-partitioning

Напишите им и объясните, что они не знают о структуре таблиц в PG ничего.

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

Блин, в википедии написано: "Используется в целях повышения управляемости, производительности и доступности для больших баз данных." - кратко и по делу.


Я старался описать весь порядок действий, чтобы человек не знакомый с данной темой, что то увидел новое, заинтересовался и начал изучать. Сколько раз сам натыкался "Гуру" всея и всего напишут код для таких же гуру, а новичок сидит и понять не может почему тут так, а не по другому. Можно было просто SQL команды написать и все, человек в теме и так поймет.
7. starik-2005 2155 21.05.20 13:34 Сейчас в теме
(2)
Меня всегда поражали люди, которые думают, что для обслуживания баз до 10 ГБ, обязательно надо учить линукс.
А чего там учить-то? Мануалы установки постгреса на Линух - три строки, мануалы установки постгреса на винду - сто страниц )))

Но статья отличная.

По поводу придирок, то, как я понимаю, эти придирки пользы ради и не со зла, но оформлены неумело, поэтому кажутся жестокой критикой - ну тут автору придирок еще учиться и учиться )))

По поводу того, что логическая таблица при секционировании превращается в несколько !физических" (в данном случае - файлов) - в принципе верно, так что лично на мой взгляд придирка несущественна.

Суть шардинга в том как раз, что данные таблицы разбиваются на несколько частей и раскладываются на несколько отдельных серверов - и тут действительно скорость может очень сильно возрасти, но в 1С основная масса операций производится в текущем периоде, а предыдущие периоды практически не используются, т.к. остатки и обороты - это данные текущего периода в основном, и исторические данные для расчета тут не используются, если все нормально с итогами. Поэтому для 1С шардинг по периоду мало актуален. Секционирование же позволяет ускорить операции поиска и циклического соединения (nested loop) из-за того, что количество записей в секции меньше, поэтому и логарифм по основанию 2 из количества записей секции меньше, чем из всей таблицы, а поиск по двоичному дереву имеет такую вот эффективность - О(log2N). Для очень больших таблиц эффект будет, для маленьких - нет. В принципе до миллиона записей в таблице эффект будет минимален.
herfis; o.nikolaev; awk; +3 Ответить
10. w.r. 575 21.05.20 19:26 Сейчас в теме
(7) проблема Linux такая же, как и проблема PG по сравнению с коммерческими субд - а именно нужна тонкая настройка io, ram, kernel, net и других параметров для оптимальной производительности. В Windows обычно такие настройки минимальны
12. starik-2005 2155 22.05.20 00:45 Сейчас в теме
(10) В Linux файловая работает быстрее, не говоря уже о Постгресе, хранилище которого состоит из множества файлов и куда больше оптимизировано для работы с файловыми системами Linux. А по поводу настройки, то есть pgtune - этих настроек достаточно, чтобы получить производительность не хуже MS SQL (во многих операциях даже быстрее).

Да и вообще не совсем ясно, что такое "тонкая настройка io, ram, kernel, net"? Можно с примерами, а то звучит, как будто это какое-то сакральное знание, которое кроме Вас никто не знает. Как настроить io? Это характеристика хранилища, она определяется железом. То же самое с ram и net, последнее часто в роутеры упирается, а не в настройки системы, да и, в отличие от вендов, в Linux в принципе что-то можно тут настроить. НУ а kernel? Тонкая настройка компиляции не под generic i686? Так на венде вообще с этим ничего поделать нельзя - там по-умолчанию ядро и большая часть софта скомпилировано без оптимизаций, а игрухи скомпилированы оптимизирующим компилятором от intel, поэтому, если игруха не адаптирована под AMD, то работает она на нем медленнее, а если адаптирована, то Intel нервно курит в углу...
o.nikolaev; awk; +2 Ответить
18. w.r. 575 22.05.20 15:28 Сейчас в теме
(12)

Смотрите ссылки

https://www.percona.com/blog/2018/08/29/tune-linux-kernel-parameters-for-postgresql-optimization/
https://doc.opensuse.org/documentation/leap/archive/15.1/tuning/html/book.sle.tuning/cha-tuning-memory.html
https://cromwell-intl.com/open-source/performance-tuning/disks.html
http://fasterdata.es.net/host-tuning/linux/

Чтобы настроить линукс на максимальную производительность, нужно многим параметрам по моим ссылкам задать правильные значения
19. starik-2005 2155 22.05.20 16:15 Сейчас в теме
(18)
Чтобы настроить линукс на максимальную производительность, нужно многим параметрам по моим ссылкам задать правильные значения
Большинство приведенных Вами по ссылкам параметров - условно помогают в некоторых специфических случаях. Например, SHMMAX и SHMALL неактуальны для 64-битных релизов, HUGE PAGES - актуальна для очень специфических ситуаций, но в обычных кейсах работы с 1С от нее прироста нет никакого. Опять же настройка своппинга вряд ли поможет увеличению быстродействия при достаточном количестве памяти, а если памяти мало, то вообще не стоит разворачивать на таком компьютере сервер СУБД. Настройка памяти больше задействует кэширующий механизм ОСи и не имеет смысла для сервера СУБД, т.к. любой кеш может привести к поломке базы данных, с другой стороны тут лучше временные таблицы перенести в память - уже поможет ускориться, но, опять же, памяти должно быть много, поэтому часто все решается быстрым диском.

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

Тюнинг TCP нужен для работы сети, а сеть упирается в то, что 1С в принципе обменивается пакетами по 4 Киб, поэтому пинг сильно влияет на работу файловой системы и не так сильно - серверной. Но это относится к серверу приложений 1С, а не к работе сервера 1С и сервера СУБД, т.к. обмен данными между ними редко приводит к затыку, ибо операции планирования и извлечения данных из базы и операции генерации запроса на сервере приложений съедают львиную долю ресурсов, так что сеть тут явно не первое, во что упирается производительность. Особенно, если сервер приложений и СУБД находятся на одной физической машине (1С далеко не всегда хорошо работает в виртуальных средах).

Вообще, самый простой способ ускорить связку 1С и постгрес - включение режима высокой производительности. В винде это делается понятно как, в Linux немного сложнее. Но включение этого режима даже голый IOPS поднимает до 25%, а скорость работы связки СУБД и 1С - раза в 2.
awk; ansh15; +2 Ответить
14. awk 714 22.05.20 11:56 Сейчас в теме
(10)
В Windows обычно такие настройки минимальны


Дай угадаю почему? Потому что их там меньше?
17. w.r. 575 22.05.20 15:16 Сейчас в теме
(14) все верно, система автоподстраивается. За это, в том числе, люди и платят деньги, когда покупают коммерческое по
20. awk 714 22.05.20 17:43 Сейчас в теме
(17)
все верно, система автоподстраивается.
Можно пример где система Windows автоподстраивается. А то кроме файла подкачки ничего в голове не всплывает.
21. w.r. 575 22.05.20 17:59 Сейчас в теме
(20)

Например

https://help.relativity.com/9.0/Content/System_Guides/Environment_Optimization_Guide/Confi­guring_the_Windows_server.htm

Достаточно нажать мышкой "Windows power plans and CPU performance" = "High performance"

и

"Windows processor scheduling" = "Background services"

И система сама настроится на режим максимальной производительности процессора и фоновых служб

А в линукс нужно будет лезть в параметры ядра читать про них и ковырять
23. starik-2005 2155 22.05.20 19:10 Сейчас в теме
(21)
Достаточно нажать мышкой "Windows power plans and CPU performance" = "High performance"

и

"Windows processor scheduling" = "Background services"
Первое в Linux делается достаточно просто, а второе - это лишь приоретизация фоновых процессов и пользовательских программ. По-умолчанию венда ставит фоновым программам приоритет ниже среднего, если же "переключить рычаг", то фоновым процессам устанавливается обычный приоритет, в Linux - не стоит забывать, что это серверная система, все и так с приоритетами отлично и ничего не нужно настраивать дополнительно (при том я не заметил изменений в скорости работы 1С в винде с приоритетом даже реального времени, правда и в Linux этот приоритет не дал никакого эффекта, но и фоновая нагрузка при тесте была минимальной).

В настройках MS SQL есть огромное количество относительно документированных опций, включение и выключение которых приводит к изменению профиля производительности очень определенных задач. Вот, например, флаги трассировки, суть которых описана в документации, но ничего не сказано, к какому эффекту это приводит. Так что тут MS SQL куда менее дружественен, но за свою стоимость он из коробки просто обязан работать лучше, чем бесплатный PostgreSQL, но делает он это далеко не во всех сценариях работы даже с 1С. И тут проблема и в 1С с ее архитектурными штрафами (например, большинство запросов могли бы быть оптимизированы с применением инструкции WITH - общие табличные выражения, позволяющие отказаться от создания множества мелких временных таблиц, которые в ряде случаев - и у Вас тоже - приводят к серьезной просадке производительности), и в частом отсутствии работающего плана обслуживания - в PostgreSQ от 1С статистика сама обновляется, в MS SQL из коробки - нет. Даже высокая производительность - не так уж и часто встречающаяся на "промышленных серверах" опция, т.к. нередко это какая-то виртуальная инфраструктура с хостом в лучшем случае в режиме сбалансированной производительности, а иногда и в PowerSave, ибо какой-нить датацентр платит по электрическим счетам, а зачем им терять бабло?

В общем и целом в Linux и Винде есть очень много настоек, но если говорить о Винде, то часто суть ее настроек покрыта тенью, множество настроек никак не документированы. Linux имеет открытый код и, в принципе, кто угодно может стать комиттером даже в ядро ОС, то же самое и о PostgreSQL, поэтому без точной и полной документации такая разработка в принципе невозможна, отсюда и такой массив знаний по открытым системам, применяемым достаточно широко (а Linux и PodtgreSQL применяются ОЧЕНЬ широко и количество их разработчиков превосходит армию мелкомягких на несколько порядков и они заботятся о документации, а мейнтейнеры свободных проектов неукоснительно следят за качеством и кода, и документации, в отличие от каких-то внутренних мало кому доступных ресурсов M$).
awk; acanta; +2 Ответить
26. w.r. 575 22.05.20 21:18 Сейчас в теме
(23) опять пошли песни про «открытый код». Мне интересно, хоть один тру линуксоид разбирался в этом «открытом коде» в плане понимания работы параметров. Хотя, наварено, они все имеют уровень программирования на C/C++ мидл и выше. В том числе и вы )
29. starik-2005 2155 22.05.20 21:39 Сейчас в теме
(26) так дело не в том, что пользователь в этом понимает, а в том, что понимают в этом коммиттеры и как происходит разработка. Пользователю в Linux сейчас на мой взгляд легче, чем в винде - почти все поддерживаемое ПО доступно в менеджере пакетов (в Убунту он включает и snap-репозитории, в Минт почти для каждого пакета есть описание и картинка, ну и вероятность скачать с новой программой вирус стремится к нулю).

Т.е. пользователю на мой взгляд (глядел на своих друзей, которым уже по их просьбу ставлю на компьютеры теперь Минт, до этого Убунту) Linux современный куда удобнее и проще, чем Windows, особенно на не самом новом железе (да, не все зарабатывают отстатыщ и не все могут позволить раз в три года покупать себе новый ноут). Пользовательский кейс для 99% обычных пользователей персонального компьютера предельно прост: браузер (95%, -> 99%, т.к. гугл докс/шитс и воцап овер веб), документы/таблицы (4%), мессенджеры (1%), игрушки (как придется, но большинство моих знакомых не особо играет - если в браузерные игры, игроманов с диагнозом среди моих знакомых единицы, но и их игрушки без проблем идут в Linux - и куда стабильнее и быстрее - сам как-то сидел в EVE).

А вот по поводу комиттеров, то если для человека хобби - это разработка ПО, то он как раз идет помогать творить открытые проекты. Да, это не админы и не программисты 1С, не фронтендщики и даже не бэкэндщики - это мегаперцы, имена которых золотой нитью вошли в историю создания софта. И если человек дорос до уровня, когда он может потратить время на разработку свободного ПО, то это о многом говорит. Ну и студенты ведущих ВУЗов мира - это вторая часть комиттеров, которые под руководством научных руководителей - серьезных профессоров - создают открытый софт (тот же PostrgeSQL начинался и до сих пор продолжается, как серьезный учебный и научный проект). Ну и третья часть разработчиков свободного софта - это сотрудники коммерческих компаний, производящих оборудование и производящих исследования в области программного обеспечения. Это очень квалифицированные сотрудники, а компании тратят на это деньги для того, чтобы обкатать свои идеи на большом количестве инсталляций софта. В итоге обкатанные на свободном софте идеи в последствии имлементируются в коммерческий софт с другим уровнем поддержки или же компания начинает продавать поддержку открытого софта. И уж поверьте, все эти люди из Гугла, Амазона, Интел, АМД, АйБиЭм и т.д. и т.п. очень хорошо разбираются в программировании в отличие от Вас (и даже меня, хотя я вполне способен написать программу на С/С++ с красивыми окошками, которая будет работать очень быстро).
31. awk 714 22.05.20 22:32 Сейчас в теме
(29)

Ошибку компании Microsoft в отношении к программному обеспечению c открытым исходным кодом (open source) признал президент корпорации Брэд Смит, 19 мая сообщает издание The Verge.

На выступлении в массачусетском технологическом институте Смит заявил, что «Microsoft заняла неверную сторону» в отношении к open source. Он отметил и свою личную ошибку.

ИА Красная Весна
Читайте материал целиком по ссылке:
https://rossaprimavera.ru/news/1e4ceb2a

Дальше спор смысл имеет? Боюсь сбудется страшный сон, выйдет Microsoft Linux Vista. :)))
32. ansh15 22.05.20 22:57 Сейчас в теме
33. awk 714 22.05.20 23:02 Сейчас в теме
(32) Это не совсем то, я где-то видел новость про "Microsoft Linux for Azure", но найти не могу, потому воздержался от упоминания...

Весьма вероятно я ошибаюсь.

Хотя M$ я понять могу. Разработка ОС, вещь затратная. А рынок microsoft (настольные ПК) схлопывается. Так что вовремя предать - это не предать, а предвидеть...
37. awk 714 23.05.20 08:26 Сейчас в теме
46. papami 30 24.05.20 20:52 Сейчас в теме
(23)
Я как-то на совещании наблюдал спор между двумя специалистами. Один варится в Windows, другой в Linux. Это все было в контексте проведения документа в типовой конфигурации - 32 сек. Так вот если там написано как-то что на Linux+PG будет проводиться 31 сек, а на Windows + MS SQL -32 сек. - ОС и СУБД тут роли не играет вообще ни какой. А бухи седеют по другой причине.
24. ansh15 22.05.20 19:22 Сейчас в теме
(21) Набрать несколько строк на клавиатуре, это же просто, правда? Да, мышкой не потыкаешь...
28. w.r. 575 22.05.20 21:28 Сейчас в теме
(24) а если ОС не CentOS/Fedora. Да и документации как таковой, кроме режимов работы, нет. Ну конечно авторы в качестве документации предлагают собственную презентацию. Очень креативно в духе открытого софта )
25. awk 714 22.05.20 21:09 Сейчас в теме
(21)Я просил пример автоподстраивания, а не настройки. Про настройки я помню... Меня автоподстраивание интиресует...
27. w.r. 575 22.05.20 21:21 Сейчас в теме
(25) один клик мышкой и система настойки сделает автоматически
30. awk 714 22.05.20 22:25 Сейчас в теме
(27) Это и в других системах есть. Ок, давай по другому. У меня автомобиль, запоминает стиль моего вождения. После того как туда садиться моя жена, мой авто подстраивается под ее стиль. Когда сажусь я он снова перестраивается под меня. При этом я не клацаю по кнопкам. Это называется автоподстройка. Ничего подобного на винде я не припомню, вот и спрашиваю.
36. D_astana 20 23.05.20 07:15 Сейчас в теме
А чего там учить-то? Мануалы установки постгреса на Линух - три строки, мануалы установки постгреса на винду - сто страниц )))

Если было бы все так просто. Я не спорю, что слон заточен под линуксу, но плюшки от этого появляются при достижении размера базы больших размеров, а так же от количества сеансов. У меня 7 филиалов по области с 2-3 базами до 5 Гб каждая. Во что мне выльется ставить линукс при том, что я не знаю его от слова совсем
1)установка postgresql. Libucu, отключение автообновление компонентов стандарными сюда же
2) на этом компе, сервер 1с и конфигуратор, на нем работаю когда ставлю обновления и доработки. Тоже настраивать
3) консоль администрирования сервера 1с работать не будет.
4) настраивать rdp
5) настраивать самбу или что то еще для общих папок
6) бухи любят в ексель отчеты выгружать, скидывать и говорить тут цифры не те. Ексель тоже надо как то открывать.
7) стоит софт для выгрузки, шифрования, подписи электронных счетов фактур и налоговой отчетности для отправки налоговикам. Его не то что настраивать надо, скорее всего только на винде работает.
8) есть внешняя база для хранения истории изменения реквизитов. Работает, через com соединение.
9) софт для централизованного управления списком баз на каждом компе пользоаателя. Через него же идет удаленный рабочий стол к бухам. Надо все перенастраивать и пользоваться vnc для тех поддержки
10) скрипты обслуживания, архивирования, пересчета итогов, применения конфы после обмена по распределенке,. Все пересматривать.
11) настройка софтового raid

Скорее всего не все даже вспомнил. И тут либо второй комп на винде ставить. Либо основной осью винду, а линукс на виртуалку. Вот зачем все эти танцы для 3 гб баз? Условно ради того, чтобы оборотка у бухов на 1 сек быстрее формировалась? Не надо так радикально занимать ту или иную сторону. Везде есть свои нюансы.
38. awk 714 23.05.20 08:46 Сейчас в теме
(36)
Если было бы все так просто.
Вся сложность только в голове.
У меня 7 филиалов по области с 2-3 базами до 5 Гб каждая.
Зачем вам PG? SQL server Express Edition прекрасно все переварит.

1 - Не понял, если поставить комп с PG, то это не проблемма.
2 - Я даже на винде бы так не делал. Пусть сам все делает. Зачем мне туда лезть?
3 - И что? Консоль сейчас из любой базы доступна, даже на Mac, на Linux и подавно...
4 - Зачем?
5 - Зачем? В виндах это то же настраивать надо.
6 - Формат офиса открывается на любой системе, даже на Android.
7 - это называется вендор лок - это единственный нормальный аргумент из всех (другие можно не приводить)
8 - COM отмирает и 1С его рекомендует не использовать, во избежание проблем.
9 - Надо, это будет надо рано или поздно.
10 - Чем этот пункт от пункта 9 отличается?
11 - Так и? Опять дубль п. 9?

Где я написал, что Linux лучше Windows?

Мое мнение, что ставить PG или Apache на Windows - глупо, так как там есть SQL server и IIS - которые так же бесплатны (до определенного предела)...
39. D_astana 20 23.05.20 09:01 Сейчас в теме
(38)я вам о помидорах, вы мне о зимней резине. Даже не знаю, что вам ответить. Я ответил пунктами сколько мне надо изучать чтобы перейти на линукс. Ради символического ускорения. Пункты 11 и 9 в одном изучение настроки удаленного рабочего стола в другом изучение настройки софтового раид. Что в них может быть одинаково? В 10 вообще про мои действующие скрипты. Пункт про com так это уже работает и с линуксой надо будет пределывать. Или вы мне предлагаете подойти к главбуху и сказать у вас не будет информации кто поменял документ в прошлом году, потому что мне надо линукс поставить ибо виндовс не по феншую?
40. awk 714 23.05.20 10:33 Сейчас в теме
(39)
я вам о помидорах, вы мне о зимней резине.

Вот именно. Вы сами придумываете утверждение и сами с ним спорите. Я не писал, что вам надо переходить на Linux.

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


Это железобетонный аргумент, что бы оставить Windows. И не то что Windows, а Windows конкретной версии.

P.S. Не хотите учить Linux - не учите. Всем до ваших знаний, как до лампочки... Я не призываю вас его учить. Чем меньше у вас знаний, тем дороже я на рынке, как специалист.
41. D_astana 20 23.05.20 12:28 Сейчас в теме
(40)1) Вы придрались к виндовс, да еще так бесцеремонно и потом начался весь холивар. Хотя статья далеко была не в этом. Что то ваших комментариев я не нашел под статьями где виндовс в связке со слоном используют на более больших базах. Теперь вы говорите, что не говорили переходить на линукс.
2) 11 пунктов я писал другому человеку. Опять приходите, обсир.. те все, потом пишите, что вам до ламчки, что же вы тогда лезете?
3) и под конец назвать себя умнее меня, да еще местоименее я выделить жирным. Это гениально.

Если вы руководите отделом или фирмой я прям завидую вашим подчиненным. Почему то я думал, что токсично только на форумах онлайн игр, а тут можно обмениваться опытом, ан нет.
42. awk 714 23.05.20 15:24 Сейчас в теме
(41)
Вы придрались к виндовс, да еще так бесцеремонно


Процитируйте, где я придираюсь к Windows.

начался весь холивар


Начался он с ваших слов о Linux. цитирую:

Меня всегда поражали люди, которые думают, что для обслуживания баз до 10 ГБ, обязательно надо учить линукс.


Теперь вы говорите, что не говорили переходить на линукс.
Нет не говорил. Говорил не ставьте Postgres на виндовс.

11 пунктов я писал другому человеку
Тогда это делают с указанием номера комментария.

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

вам до ламчки
Не мне, а всем. Всем все равно, что у вас Windows, Linux.

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

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

Если вы руководите отделом или фирмой я прям завидую вашим подчиненным.



Одна маленькая птичка улетела очень далеко в чужие земли.
Когда она оказалась там,то обнаружила,что это очень холодное место и замёрзла насмерть.Мимо проходила корова и насрала кучу прямо на неё,тёплое дерьмо которое упало на тело,растопило лёд и птичка воскресла,снова живая,но всё ещё под кучей она начала чирикать.Кошка проходя мимо,услышала её пение,откопала её из дерьма и потом съела птицу!

не всяк тот враг, кто на тебя насрал.
не всяк тот друг, что из говна тебя вытащил.
43. starik-2005 2155 24.05.20 15:08 Сейчас в теме
(36)
Если было бы все так просто. Я не спорю, что слон заточен под линуксу, но плюшки от этого появляются при достижении размера базы больших размеров, а так же от количества сеансов. У меня 7 филиалов по области с 2-3 базами до 5 Гб каждая. Во что мне выльется ставить линукс при том, что я не знаю его от слова совсем
1)установка postgresql. Libucu, отключение автообновление компонентов стандарными сюда же
2) на этом компе, сервер 1с и конфигуратор, на нем работаю когда ставлю обновления и доработки. Тоже настраивать
3) консоль администрирования сервера 1с работать не будет.
4) настраивать rdp
5) настраивать самбу или что то еще для общих папок
6) бухи любят в ексель отчеты выгружать, скидывать и говорить тут цифры не те. Ексель тоже надо как то открывать.
7) стоит софт для выгрузки, шифрования, подписи электронных счетов фактур и налоговой отчетности для отправки налоговикам. Его не то что настраивать надо, скорее всего только на винде работает.
8) есть внешняя база для хранения истории изменения реквизитов. Работает, через com соединение.
9) софт для централизованного управления списком баз на каждом компе пользоаателя. Через него же идет удаленный рабочий стол к бухам. Надо все перенастраивать и пользоваться vnc для тех поддержки
10) скрипты обслуживания, архивирования, пересчета итогов, применения конфы после обмена по распределенке,. Все пересматривать.
11) настройка софтового raid
Показать

В действительности грамотно администрировать Windows часто не проще, чем Linux - множественные однообразные оснастки только мешают делу, достаточно сложная Power Shell, команды которой больше запутывают, чем помогают в этом деле (хотя тут уже ближе к нормальному администрированию системы на базе скриптов).

По поводу нескольких филиалов с базами под 5 Гиб - да, оно где угодно работать будет, даже на том же экспрессе от мелкомягких, который и стоит при таком раскладе ставить на винду - смысл ставить постгрес тут отсутствует, если это не Linux-машина. Более того, часто достаточно файловой с публикацией на веб-сервисе (с IIS у меня лично даже на винде были проблемы, например, не работала толком 8.3.15.1830 при подключении из тонкого клиента через http:// - при открытии любого окна вываливалось сообщение об ошибке, при этом в браузере все работало, при этом в Apache 2.4 таких проблем не было - и в браузере, и в тонком клиенте все работало отлично, поэтому я не особо любитель IIS - у меня там даже при публикации МП внешние компоненты отказываются подключаться, а с apache все работает)

По поводу пунктов, то готов тоже ответить:
1. Установка в принципе любого дистрибутива Linux - это, опять же на мой взгляд с высоты опыта, куда более простое предприятие, чем установка современной серверной Winodws-системы и ее настройка. Обычная Windows 10 хоум или даже ультимэйт - это игровая система, которой не место в качестве сервера, т.к. по-умолчанию включено кэширование записи и много других оптимизаций, которые неприемлемы на сервере.
2. Установка 1С на Linux отличается от установки 1С на Windows - нужно пару команд в консоли писнуть, но в части работы отличий визуально нет -и конфигуратор, и толстый/тонкий клиент. При том файловая даже работает под Linux быстрее (стынул с Гилева для процессора AMD Ryzen 3600 максимальный результат файловой в винде - 106.38, у нас на работе на Linux результат 125 (в Гилеве Linux не показывает проц, поэтому все результаты с пустым процессором). Я, кстати, писал статью о практике перехода на Linux в одной конторе, в которой нет админов - уже больше года все работает на обычном Ubuntu 18.04 LTS с аптаймом в полгода. У меня заняло пару часов вся настройка, включая софтовый рейд. Чуть больше половины этого времени я ждал выгрузку dt-шника со старого сервера.
3. Консоль администрирования можно запустить на любом оставшемся на винде компе пользователя, ибо если на них все настроено (кассы, там, сканеры ШК и т.д. и т.п.), то зачем лишние телодвижения? Пусть компы пользователей остаются на винде, а с них уже все эти транзакции с налоговыми, ПФРами, банками и т.д.
4. Зачем? В Linux есть VNC через ssh - он бесплатный, я через него к людям цепляюсь при необходимости, для администрирования просто по ssh. Также есть энидэск, тимвьювер, зум, ... Не совсем понимаю здесь необходимость именно RDP, который, конечно, можно настроить, но это же у Вас не сервер удаленной разработки - нафига там RDP при куче другого софта, которому не нужен белый IP, за который нужно платить и который делает жизнь небезопасной (особенно для винды).
5. Самба в ряде дистров "искаропки", в ряде других достаточно установить пару пакетов. В убунту при расшаривании папки система предлагает сама установить все пакеты (и нет только там). И все начинает работать, но я бы не стал в шаре Linux организовывать файловую базу.
6. Бухи живут на своих виндовых компах - вот и пусть живут.
7. Аналогично.
8. В последней версии платформы изменения - это история объектов. Просто включи ее для нужных документов, справочников и даже регистров - и отдыхай без СОМа и прочих дополнительных бессмысленных вещей.
9. Бухи, получается, подключаются куда-то к центральной базе? Ну а что ж это Вы сразу не сказали, что у Вас есть датацентр, в нем 10 баз по 5 гигов, к нему по RDP подключаются пять бухов - сразу понятно, что архитектура неверная. Мне на днях друг с региона написал, что у клиентки его тормозит 1С. Я посмотрел, а у них там анекдот просто - есть на работе комп, на котором базы и все такое, к нему удаленно подключаются пользователи ЧЕРЕЗ HAMACHI!!! И дальше они подключаются к удаленному диску, на котором лежит файловая база 1С, с которой пользователи и работают. Вроде бы RDP - хороший подход, да? Но нет. Я просто поставил апач на их "сервер", опубликовал на нем базу, научил админа это делать, подключил дамочку, у которой это все тормозило (журнал документов с договорами открывался 10-40 минут!!!). В итоге она когда увидела, что журнал открывается ДВЕ СЕКУНДЫ, она чуть в обморок не упала (а может и упала, т.к. некоторое время молчала а на заднем плане был слышен какой-то шум). Т.е. никакого RDP, никакого 1С-сервера, при этом все летает. Я тут как-то с одним идиотом спорил, пытаясь объяснить, где в таком раскладе находится кэш данных и почему сетевая база не может его использовать, но так и не смог.
10. При десяти базах в 5 гигов использовать распределенку - это уметь надо.
11. Минутное дело - разбирал в своей статье.

(36)
Вот зачем все эти танцы для 3 гб баз?
Так вот и я не понимаю, зачем вся эта распределенка и кучу всего остального для уже трехгиговых баз. Вы там, ИМХО, и так архитектурно выбрали не самую удачную концепцию. Сейчас резервный канал по 4G поднять при необходимости (с учетом четырех операторов с неплохим интернетом в большинстве селений) куда проще, чем тянуть все то, что Вы тут понаписали.
44. D_astana 20 24.05.20 17:31 Сейчас в теме
(43)я прекращаю спор, мало того, что вы не отвечаете на прямой вопрос, а копаетесь в пунктах где вы видите, что вам удобно. Так еще пытаетесь меня учить не зная всех нюансов. Я эти пункты писал кратко, чтобы показать сколько мне учить надо, и не для того чтобы вы архитиктуру мне простроили. Из за краткости вы где то меня не поняли в корне, где- то всю картину не видите и на этом фоне ваши советы не уместны. Я бы посмотрел как бы вы организовали доступ без распределенки из Казахстанских деревень, где чтобы позвонить надо на крышу дома залезть))) а проводной интернет по несколько дней пропадать может и потом бухи будут не работать. И таких нюансов по 10 листов на кажоый пункт. Прекращаю спор идиологических линуксоидов не переубедишь.
45. starik-2005 2155 24.05.20 19:32 Сейчас в теме
(44)
Прекращаю спор идиологических линуксоидов не переубедишь
Так спор-то, как я понимаю, не Linux vs Windows, а архитектурный. Я ж не против винды - пусть она остается на компах бухгалтеров и компьютерно-кассовой системы, а на сервере винда особо не нужна. Вы говорили о СОМ, который нужен для истории изменений объектов - у меня на прошлой работе была эта (или другая) подсистема, которая сохраняла изменения объектов, а потом отправляла их в отдельную базу данных. Сейчас встроенный в платформу механизм истории обладает аналогичными функциям, т.е. позволяет посмотреть и сравнить версии объекта друг с другом - просто включите для какого-нить объекта и посмотрите, просто ПКМ в списке на объекте.

По поводу "прямого вопроса", то я, лично, ни одного вопросительного знака не увидел в Вашем сообщении, если не считать, вопроса о том, зачем Вам танцы с бубном. Но на это можно ответить и в том ключе, что учиться новому - это в принципе хорошо и полезно. Исследуя данные теста Гилева, я там вижу 15к тестов на платформе Linux из 250к - да, около 6%, что примерно равно распространенности Linux на десктопах. И это говорит о том, что у каждого 20-го примерно пользователя стоит Linux. При этом Linux - отличный способ сэкономить на лицензиях. При этом платформа 1С для Linux до сих пор дает возможность без серверной лицензии с ней работать ограниченному кругу пользователей, что делает ее идеальным объектом для разработки с целью исследования ее возможностей. А освоив Linux Вы, может быть, измените свое к нему отношение, т.к. не легко с чем-то спорить, некоторым образом зная только то, что касается своей позиции. Я, например, владея и тем, и другим, понимаю плюсы Linux и минусы Windows, при этом людям, которые с Linux почти не знакомы, он вполне может казаться недружественным и сложным.
4. awk 714 21.05.20 12:37 Сейчас в теме
Я изначально написал, что не работаю с большими данными. Был бы опыт привел бы пример практической реализации.
Так я за это поставил плюс статье. Просто сравнивать быстродействие, в данном примере, некорректно.
Меня всегда поражали люди, которые думают, что для обслуживания баз до 10 ГБ, обязательно надо учить линукс.

Где я это написал? Я написал, что ставить на Windows Postgres - иррационально. Точно так же иррационально, ставить багажник на крышу спорткара.
Напишите им и объясните, что они не знают о структуре таблиц в PG ничего.

Не передергивайте. А копируя вдумывайтесь в копируемое. Письмо я написал.
обсудить новые возможности
А что в них нового? Этой технологии лет 10...

[IS-QUOTE] Я старался описать весь порядок действий, чтобы человек не знакомый с данной темой, что то увидел новое, заинтересовался и начал изучать.[IS-QUOTE]

Да написали - молодец. Только примеры - это натягивание совы на глобус.

У вас первая статья, она очень не плохая. Просто примите к сведенью в будущих статьях и пишите, обязательно пишите еще - у вас это получается.
starik-2005; +1 Ответить
5. D_astana 20 21.05.20 12:56 Сейчас в теме
(4)
А что в них нового? Этой технологии лет 10...


Ну как бы Декларативное секционирование только в 12 версии до ума довели. После выхода 12 версии разработчики postgrespro даже от своего расширения "pg_pathman " отказались. Похожих тем в контексте 1с я не увидел (может плохо искал), а 10 лет до этого делали через триггеры и работало это, как заверяют разработчики, медленнее.


Просто сравнивать быстродействие, в данном примере, некорректно.


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

Да написали - молодец. Только примеры - это натягивание совы на глобус.


Объясните как правильно протестировать и я дополню статью, а если будет объемно напишу другую. Только у меня такое ограничение, что баз с большими данными не имею. Все равно придется наполнять самому.
6. awk 714 21.05.20 13:19 Сейчас в теме
(5)
может плохо искал

Постгрес в контексте 1С явление молодое, активно с 2014 года, после "импортозамещения". А секционирование я использовал в 2012 году, на MS, в PG оно уже лет пять на тот момент было..

не пойму почему

Потому, что СУБД не оперирует терминами таблица, а оперирует терминами страница. И разбив одну таблицу на две, для СУБД вы не изменили ничего. Это почему я придрался к определению. Что бы что-то поменять, вам надо таблицы физически разнести по разным хранилищам, а не логически разбить на части. В статье на постгреспро, на это намекает "fasttablespace". Допустим у нас есть дешевое медленное хранилище и дорогое быстрое. Понятно, что объема быстрого хранилища на все не хватит. Вот мы и перемещаем часто записываемую/читаемую часть в это дорогое, но быстрое место.

Объясните как правильно протестировать и я дополню статью, а если будет объемно напишу другую. Только у меня такое ограничение, что баз с большими данными не имею. Все равно придется наполнять самому.


Если вы выделите еще один RAM диск, то получите дорогое, ограниченное хранилище. И тут большое будет понятием относительным. Я когда то писал под Android 2.0 там большой была база в 20 Mб (если не ошибаюсь, оперативки всего 16 Мб)... Сейчас у нас базы в 100 Гб в оперативке и нормально...
starik-2005; +1 Ответить
8. D_astana 20 21.05.20 13:43 Сейчас в теме
(6)
И разбив одну таблицу на две, для СУБД вы не изменили ничего.


то бы что-то поменять, вам надо таблицы физически разнести по разным хранилищам, а не логически разбить на части


Я не согласен с вами. В PostgrSQL Декларативное секционирование предполагает под каждую секцию отдельный файл. Как раз за счет того, что у нас не один файл размером 30Г, а 10 размером 3 гб разработчики при больших объемах обещали ускорение. За счет

1) Определенных запросов если условие выборки совпадает с ключом разбиения таблицы. Тогда у нас данные ищутся не в 30 Гб, а в только в 3
2) Если запросы затрагивают несколько секций, ты выборка идет распареллено.


Поэтому для 1С шардинг по периоду мало актуален. Секционирование же позволяет ускорить операции поиска и циклического соединения (nested loop) из-за того, что количество записей в секции меньше, поэтому и логарифм по основанию 2 из количества записей секции меньше, чем из всей таблицы, а поиск по двоичному дереву имеет такую вот эффективность - О(log2N). Для очень больших таблиц эффект будет, для маленьких - нет. В принципе до миллиона записей в таблице эффект будет минимален.


Именно это я и пытался протестировать.Видимо сказывается отсутствие опыта и теоретических знаний, чтобы правильно все донести :((

А секционирование я использовал в 2012 году


Повторюсь я пытался показать именно декларативное секционирование, которое полноценно появилось только с выходом 12 версии.

Не в обиду, но сложилось впечатление, что из за того, что я явно не указал про декларативное секционирование в начале статьи, вы полностью ее не прочитали, подумав про секции с использование триггеров и триггерных функций.
9. w.r. 575 21.05.20 19:24 Сейчас в теме
PG 12 это конечно хорошо. Но сборки от фирмы 1С есть только пока для 11й версии. Надеюсь при переходе на 12 версию будет какой-то скрипт автоматического создания секций для больших таблиц
11. w.r. 575 21.05.20 19:37 Сейчас в теме
Вообще хочется отметить автора за проделанный большой труд. А все критиканы, пытающиеся самоутвердиться, пусть идут в лес пишут свои статьи
o.nikolaev; YPermitin; +2 Ответить
13. lmnlmn 59 22.05.20 11:35 Сейчас в теме
Спасибо автору за исследование.
15. АлександрВладимирович 22.05.20 13:17 Сейчас в теме
Большое спасибо за статью!
Познавательно!
16. Painted 32 22.05.20 13:57 Сейчас в теме
Закрыть на уровне СУБД редактирование таблиц старых периодов и 100% быть уверенным, что пользователи не отредактируют данные за прошлые года.
База в режиме ReadOnly быстрее работает, как один из плюсов секционирования.
22. herfis 363 22.05.20 18:01 Сейчас в теме
Замечательный пример практического секционирования на примерах, родных для одинэсников.
Отлично подготовленный материал.
Однозначный плюс.
35. o.nikolaev 196 22.05.20 23:20 Сейчас в теме
Отличная статья для начального знакомства с темой.
Оставьте свое сообщение

См. также

Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия

Производительность и оптимизация (HighLoad) Администрирование СУБД Технологический журнал Структура метаданных v8::Запросы Бесплатно (free)

Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.

24.05.2020    4461    0    DataReducer    22    

Настоящий краудфандинг. Даешь сравнение двух СУБД!

Администрирование СУБД v8 Бесплатно (free)

Первый вариант сравнения двух СУБД. Каждый может внести правку и получить SM. Приветствуются конструктивные комментарии, начинающиеся словами "Автор ничего не понимает".

11.05.2020    1808    0    Mari_Kuznetzova    20    

DBCC CHECKDB оповещение о повреждении баз данных SQL

Администрирование СУБД Россия Бесплатно (free)

Проверка целостности баз данных SQL при помощи DBCC CHECKDB и рассылка оповещений на почту.

09.05.2020    1579    0    P_enemy    2    

Эти занимательные временные таблицы

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    8867    0    YPermitin    0    

Как работает 1С размером 13 ТБ в условиях непрерывной разработки

Перенос данных из 1C8 в 1C8 Администрирование СУБД Бесплатно (free)

Обеспечение быстрого непрерывного обмена данными между высоконагруженными системами 1С, покрывающими всю территорию России, требует ответственного подхода к архитектуре и инструментам, используемым для обмена. Как правильно построить такую инфраструктуру и научиться ее оперативно мониторить, в своем докладе на конференции Infostart Event 2019 Inception рассказал разработчик компании «ДНС Ритейл» Максим Старков.

27.03.2020    9468    0    max_st    52    

1С + Apache + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt windows

Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Есть куча инструкции про связку с ISS, решил добавить свои 5 копеек, как я это настраивал на Apache на Windows.

02.03.2020    2374    0    rst_filippov    5    

Ошибка при обновлении: Записи регистра сведений стали неуникальными: Двоичные данные файлов

Администрирование СУБД v8 Бесплатно (free)

Способ обойти ошибку обновления Записи регистра сведений стали неуникальными: ДвоичныеДанныеФайлов.

26.02.2020    2747    0    dubovenko_m    9    

Контроль места на дисках

Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Один из последних случаев на работе. Диск, на котором хранились файлы базы, "развалился", база потеряна. Начали искать копию базы. Копии базы делались на другой диск, но оказалось, что на том диске нет места и копии не делались несколько дней. Так было потеряно несколько дней работы фирмы, кому-то выговор, кого-то уволили((.

20.02.2020    2749    0    wowik    20    

Нюансы лицензирования 1С

Администрирование СУБД v8 1cv8.cf Россия Бесплатно (free)

Эта памятка написана изначально самому себе, но будет полезна другим, т.к. в вопросах лицензирования 1С есть тонкие нюансы, которые нужно знать как покупателям, так и продавцам 1С.

19.02.2020    7629    0    fixin    112    

Сказ о том, как online_analyze INSERT "удлинял"

Статистика базы данных Администрирование СУБД Бесплатно (free)

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

10.02.2020    1782    0    Sloth    0    

Настройка SoftEther VPN Client на Linux Debian/Ubuntu/Mint (связка Linux-Windows)

Администрирование СУБД Windows Linux Россия Бесплатно (free)

На сервере установлен и настроен VPN через программное обеспечение SoftEter VPN Server, настроены клиенты с доступом по сертификату, встала задача настроить доступ клиента из Linux и подключиться по RDP (VNC) в Windows к серверу VPN.

04.02.2020    2330    0    ClickUp    1    

Как мы научились автоматически отслеживать ошибки в 1С

Администрирование СУБД v8 1cv8.cf Россия Бесплатно (free)

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

04.02.2020    11744    0    slozhenikin_com    27    

Автономный сервер. Часть 2 - утилита управления

Администрирование СУБД v8 Бесплатно (free)

Утилита управления "Автономным сервером" может не только управлять. Какие возможности можно использовать уже сегодня? Разбираем с примерами и ищем отличия от привычных методов.

21.12.2019    8159    0    -vito-    26    

Автономный сервер. Часть 1 - новый вариант сервера

Администрирование СУБД v8 Бесплатно (free)

В Платформе версии 8.3.14 появился новый вариант серверной архитектуры - "Автономный сервер" (бета-версия). Выясняем, что это такое, какова сфера его применения, что он позволяет уже сейчас, чего можно ожидать.

21.12.2019    10252    0    -vito-    19    

Взломать за 60 секунд!

Информационная безопасность Администрирование СУБД Бесплатно (free)

При работе с данными нужно обращать внимание не только на объемы, скорость и удобство, но и на безопасность. Если организация не уделяет внимания безопасности, пользователь с урезанными правами может получить полный доступ к базе данных за 1-5 минут. Набором типичных ошибок и действенных рецептов по усилению безопасности клиент-серверной 1С на конференции Infostart Event 2019 Inception поделился руководитель ИТ в компании «ИнфоСофт» Антон Дорошкевич.

16.12.2019    12944    0    a.doroshkevich    45    

Самые распространенные заблуждения об индексах в мире 1С

Администрирование данных 1С Администрирование СУБД Бесплатно (free)

"Магия" индексов привела к множеству заблуждений об их работе. Попробуем развеять некоторые из них в контексте 1С.

28.11.2019    17050    0    YPermitin    44    

Набор скриптов для знакомства с PostgreSQL

Администрирование СУБД Бесплатно (free)

Немного скриптов для PostgreSQL, позволяющих познакомиться с состоянием сервера.

04.11.2019    11973    0    YPermitin    17    

Сюрприз fsync() PostgreSQL

Администрирование СУБД Бесплатно (free)

Предлагаю вашему вниманию продолжение перевода статьи Jonathan Corbet "PostgreSQL's fsync() surprise". Оригинал доступен по ссылке https://lwn.net/Articles/752063/

24.10.2019    2842    0    w.r.    0    

Обслуживание баз данных. Не так просто, как кажется

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Считаете, что обслуживание индексов и статистик дело простое? Что ж, это не всегда так.

14.10.2019    15331    0    YPermitin    28    

Набор скриптов для знакомства с SQL Server

Производительность и оптимизация (HighLoad) Администрирование СУБД Бесплатно (free)

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

30.09.2019    19678    0    YPermitin    14    

1С Батл: PostgreSQL 9,10 vs MS SQL 2016

Администрирование СУБД Бесплатно (free)

PostgreSQL не так давно появился на российском рынке, поэтому у многих специалистов появляются сомнения, насколько удобно с ним работать, учитывая специфику 1С. Антон Дорошкевич, руководитель IT-отдела и направления оптимизации 1С компании «ИнфоСофт» (г. Новосибирск), рассказал о своем опыте применения этой СУБД. Тема его доклада звучала провокационно: «1С-батл между MS SQL 2016 и PostgreSQL версии 9 и версии 10».

18.12.2018    46342    0    a.doroshkevich    153    

Postgres Pro для 1С: что нового

Администрирование СУБД Бесплатно (free)

Postgres становится все популярнее, но специалисты 1С все равно немного побаиваются этой системы управления базами данных. Почему стоит решиться и попробовать эту СУБД – на конференции INFOSTART EVENT 2018 рассказал сооснователь и генеральный директор компании Postgres Professional Олег Бартунов.

10.12.2018    25443    0    user1068014    106    

Кластер серверов 1С

Администрирование СУБД v8 Бесплатно (free)

Какой уровень отказоустойчивости при проектировании серверов 1С выбрать? В чем отличия центрального и рабочего сервера? Как правильно настроить требования назначения функциональности? На что влияют настройки кластера и сервера 1С и как в них не запутаться? Антон Дорошкевич дает на эти и многие другие вопросы подробные ответы.

24.09.2018    40556    0    a.doroshkevich    67    

Инструментарий Linux администратора 1С

Администрирование СУБД Бесплатно (free)

Меня зовут Евгений Бессонов. Сегодня я собираюсь вам рассказать про инструментарий Linux администратора 1С. Сразу хочу сделать небольшую ремарку относительно моих знаний в этой области: я не могу отнести себя к разряду «линукс-гиков» – ядро по ночам не пересобираю и патчи не накладываю. Но, тем не менее, у меня накопились кое-какие наработки, которыми я с вами сейчас хочу поделиться.

31.05.2018    22967    0    _evgen_b    41    

Оптимизируй это! Или MS SQL и Экспертный подход творят чудеса!

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

В статье речь пойдет про взаимодействие сервера 1С с MS SQL. Мы очень часто слышим, как важно оптимизировать все критические участки системы заблаговременно, в плановом режиме, как надо, «от и до» во всех деталях. Но в реальной жизни бывает по-другому. Очень часто клиенты обращаются к нам, когда система уже не дает работать: «спасите, помогите, болит очень сильно, надо решать». Об одном из таких случаев я и хотел бы вам сегодня рассказать.

11.07.2017    32081    0    R.Tsarenko    32    

PostgreSQL на Windows – реальная альтернатива для высоконагруженных систем на базе 1С

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Многие интересуются PostgreSQL, но не знают, насколько хорошо будет она работать с уже существующими системами. «Инфософт» - одна из первых компаний, кто опробовал PostgreSQL на Windows. О своем опыте перехода рассказывает руководитель отдела информационных технологий компании.      

23.06.2017    41615    0    a.doroshkevich    113    

Пример работы с SQLDMO

Администрирование СУБД v8 Бесплатно (free)

SQLDMO из 1С.

27.06.2013    3566    2    imm0rtal    2