Уровни блокировок таблиц
Команда LOCK TABLE предназначена для блокировки таблиц на время транзакции. Блокировкой называется временное ограничение доступа к таблице (в зависимости от выбранного режима). Сеанс, заблокировавший таблицу, пользуется нормальным доступом; последствия блокировки распространяются только на других пользователей, пытающихся получить доступ к заблокированной таблице.
Блокировка не означает отказа в доступе. С точки зрения пользователя, подключенного к базе данных и пытающегося обратиться к заблокированному ресурсу, блокировка приводит к задержке, но не к отказу в предоставлении доступа. Пользователю приходится ожидать либо завершения заблокированной команды пользователем, либо снятия блокировки с таблицы.
Некоторые команды SQL автоматически устанавливают блокировку для выполнения своих функций; в таких случаях PostgreSQL всегда выбирает минимально необходимый уровень блокировки. После завершения транзакции блокировка немедленно снимается.
Команда LOCK TABLE без параметра устанавливает максимально жесткий режим блокировки (ACCESS EXCLUSIVE). Чтобы ограничения были менее жесткими, следует явно задать нужный режим.
Блокировка таблиц возможна только в транзакциях. Выполнение команды LOCK TABLE вне транзакционного блока не приводит к ошибке, но установленная блокировка немедленно снимается. Транзакция создается командой BEGIN; команда COMMIT фиксирует изменения в базе данных и снимает блокировку.
Ситуация взаимной блокировки (deadlock) возникает в там случае, когда каждая из двух транзакций ожидает снятия блокировки другой транзакцией. Хотя PostgreSQL распознает взаимные блокировки и завершает их командой ROLLBACK, это все равно причиняет определенные неудобства. Приложения не должны сталкиваться с проблемой взаимных блокировок, поэтому проектируйте их так, чтобы объекты всегда блокировались в одинаковом порядке.
- ACCESS SHARE MODE. Устанавливается автоматически командой SELECT для таблиц, из которых производится выборка данных. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровня ACCESS EXCLUSIVE MODE.
- ROW SHARE MODE. Устанавливается автоматически командами SELECT, содержащими секцию FOR UPDATE или FOR SHARE. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE.
- ROW EXCLUSIVE MODE. Устанавливается автоматически командами UPDATE, INSERT и DELETE. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE и CREATE INDEX. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней SHARE MODE, SHARE ROW EXCLUSIVE MODE, EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE.
- SHARE UPDATE EXCLUSIVE MODE . Устанавливается автоматически командами VACUUM (без FULL), ANALYZE и CREATE INDEX CONCURRENTLY.
- SHARE MODE. Устанавливается автоматически командами CREATE INDEX (без CONCURRENTLY). В заблокированных таблицах запрещается выполнение команд INSERT, UPDATE, DELETE, ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней ROW EXCLUSIVE MODE, SHARE ROW EXCLUSIVE MODE, EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE.
- SHARE ROW EXCLUSIVE MOOE. Специальный режим блокировки, практически идентичный режиму EXCLUSIVE MODE, но допускающий установку параллельных блокировок уровня ROW SHARE MODE.
- EXCLUSIVE MODE. Запрещает выполнение команд INSERT, UPDATE, DELETE, CREATE INDEX, ALTER TABLE, DROP TABLE и VACUUM, а также команд SELECT с секцией FOR UPDATE. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней ROW SHARE MODE, ROW EXCLUSIVE MODE, SHARE MODE, SHARE ROW EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE.
- ACCESS EXCLUSIVE MODE. Устанавливается автоматически командами ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц запрещаются любые команды или параллельные блокировки любого уровня.
3 ответа
Решение
OID в основном дают встроенный глобально уникальный идентификатор для каждой строки, содержащейся в системном столбце (в отличие от столбца пользовательского пространства). Это удобно для таблиц, в которых у вас нет первичного ключа, есть повторяющиеся строки и т. Д. Например, если у вас есть таблица с двумя одинаковыми строками, и вы хотите удалить самую старую из двух, вы можете сделать это, используя колонка oid.
По моему опыту, эта функция, как правило, не используется в большинстве приложений с постгресовой поддержкой (вероятно, частично потому, что они нестандартны), и их использование по существу устарело:
165
2011-04-11 20:22
Postgres 12 удаляет особое поведение столбцов OID
Использование OID в качестве необязательного системного столбца в ваших таблицах теперь удалено из Postgres 12. Вы больше не можете использовать:
- команда
- настройка совместимости
Тип данных остается в Postgres 12. Вы можете явно создать столбец типа .
После перехода на Postgres 12 любой необязательный системный столбец по умолчанию больше не будет невидимым. Выполнениетеперь будет включать этот столбец
Обратите внимание, что этот лишний столбец «неожиданности» может нарушить наивно написанный код SQL
9
2019-07-13 22:40
Чтобы удалить все OID из таблиц базы данных, вы можете использовать этот скрипт Linux:
Сначала войдите в систему как суперпользователь PostgreSQL:
Теперь запустите этот скрипт, заменив YOUR_DATABASE_NAME именем вашей базы данных:
Я использовал этот скрипт, чтобы удалить все мои OID, так как Npgsql 3.0 не работает с этим, и он больше не важен для PostgreSQL.
5
2015-08-11 18:37
Если вы все еще используете OID, было бы лучше удалить зависимость от него, потому что в последних версиях Postgres он больше не поддерживается. Это может остановить (временно, пока вы не решите проблему), например, переход с версии 10 на версию 12.
См. Также:https://dev.to/rafaelbernard/postgresql-pgupgrade-from-10-to-12-566i
2020-10-25 06:00
Как доработать производительный RLS
Неоднократно в последнее время поступали задачи, когда требовалось доработать новый производительный RLS. В своей статье Ретунский Александр, программист компании АО «Корпоративные ИТ-проекты» (официальный партнер ИнфоСофт) опишет последовательность действий при доработке нового RLS, ключевые моменты и сложности, с которыми столкнулся. В Интернете статей или инструкций, которые подробно и просто описывают – как доработать производительный RLS, не так много и автор делиться своим опытом.
В данной статье не будут описаны различия и плюсы/минусы между стандартным и производительным RLS, в Интернете по этому вопросу есть много информации.
Использование среды SQL Server Management Studio
Создание уникального индекса с помощью конструктора таблиц
-
В обозревателе объектов разверните базу данных, содержащую таблицу, в которой необходимо создать уникальный индекс.
-
Разверните папку Таблицы.
-
Щелкните правой кнопкой мыши таблицу, в которой нужно создать уникальный индекс, и выберите Конструктор.
-
В меню Конструктор таблиц выберите пункт Индексы и ключи.
-
В диалоговом окне Индексы и ключи нажмите Добавить.
-
Выберите новый индекс в текстовом поле Выбранный первичный/уникальный ключ или индекс .
-
В основной сетке в (Общие) выберите Тип , а затем выберите в списке Индекс .
-
Выберите Столбцы и затем нажмите кнопку с многоточием (…) .
-
В диалоговом окне Столбцы индекса в поле Имя столбца выберите столбцы, которые необходимо индексировать. Выбрать можно до 16 столбцов. Для оптимальной производительности следует выбирать только один или два столбца на индекс. Для каждого выбранного столбца укажите, будут ли значения данного столбца располагаться в индексе в возрастающем или убывающем порядке.
-
После выбора всех столбцов для индекса щелкните ОК.
-
В сетке в (Общие) выберите Уникальный , а затем выберите в списке Да .
-
Дополнительно. В основной сетке в разделе Конструктор таблиц выберите Пропустить повторяющиеся ключи , а затем выберите в списке значение Да . Сделайте это, если необходимо пропустить попытки добавления данных, создающих повторяющиеся ключи в уникальном индексе.
-
Щелкните Закрыть.
-
В меню Файл выберите Сохранитьимя_таблицы.
Создание уникального индекса в обозревателе объектов
-
В обозревателе объектов разверните базу данных, содержащую таблицу, в которой необходимо создать уникальный индекс.
-
Разверните папку Таблицы.
-
Разверните таблицу, для которой необходимо создать уникальный индекс.
-
Щелкните правой кнопкой мыши папку Индексы, выберите Создать индекс и Некластеризованный индекс…
-
В диалоговом окне Создание индекса на странице Общие введите имя нового индекса в поле Имя индекса .
-
Установите флажок Уникальный .
-
В разделе Ключевые столбцы индекса щелкните Добавить… .
-
В диалоговом окне Выбор столбцов изимя_таблицы установите флажки для столбцов таблицы, добавляемых к уникальному индексу.
-
Нажмите кнопку ОК.
-
В диалоговом окне Создание индекса нажмите кнопку ОК.
Посмотреть и удалить активные запросы
Если запрос запущен из интерфейса pgsql, то завершение работы сервера не поможет — запрос все равно продолжит свое выполнение, необходимо вызывать функцию pg_cancel_backend.
select * from pg_stat_activity; # посмотреть все запросы select * from pg_stat_activity WHERE current_query like 'SELECT%'; # посмотреть все SELECT запросы select * from pg_stat_activity WHERE current_query like 'INSERT%'; # снять все активные select запросы SELECT pg_cancel_backend(procpid) as x FROM pg_stat_activity WHERE current_query like 'SELECT%'; # снять запрос VACUUM SELECT pg_cancel_backend(procpid) as x FROM pg_stat_activity WHERE current_query like 'VACUUM%';
SELECT запросы можно снимать из ОС командой kill
# ps auxww | grep ^postgres ... postgres 15724 97.7 11.3 2332996 1871476 ? Rs 07:50 1:53 postgres: postgres mybd 127.0.0.1(53624) SELECT ... # kill 15724
procpid содержит PID процесса, которому можно сделать kill при необходимости. Например PID можно узнать запросом(отсортируем по длительности выполнения)
select datname,procpid,now()-query_start as duration,current_query from pg_stat_activity order by duration DESC;
Транзакции в PostgreSQL
В PostgreSQL Транзакция — это список команд SQL, которые находятся внутри блока, начинающегося командой BEGIN и заканчивающегося командой COMMIT.
PostgreSQL фактически считает каждый оператор SQL запущенным в транзакции. Если вы не указываете команду BEGIN, то каждый отдельный оператор имеет неявную команду BEGIN перед оператором и (при успешной отработке оператора) команду COMMIT после оператора. Группа операторов заключаемая в блок между BEGIN и COMMIT иногда называется транзакционным блоком.
Пример запуска транзакции из файла delprices.sql, которая удаляет в БД test777 из таблиц prices и ratesheets строки с id=2
# nano delprices.sql BEGIN; DELETE FROM prices WHERE ratesheet_id=2; DELETE FROM ratesheets WHERE id=2; COMMIT;
Выполним транзакцию для test777:
# sudo -u postgres psql -l # sudo -u postgres psql test777 < delprices.sql
Установка MS SQL и PostgreSQL
Давайте сравним установку PostgreSQL и MS SQL Server на Windows.
-
Чтобы поставить MS SQL-сервер, надо скачать 2,5 Гб с интернета.
-
При этом дистрибутив Postgres для Windows – 70 Мб.
-
В процессе инсталляции для MS SQL Server, нам надо сделать 12 кликов и пройти два окна настройки параметров, где мы сразу можем настроить: количество и расположение файлов для tempDB, а также расположение базы данных и лога транзакций. Время инсталляции SQL-сервера с учетом скачивания дистрибутивов – 4 часа.
-
«Виндовый» Postgres настраивается в 5 кликов (там всего одно окно настройки), почти все параметры проходят автонастройку, опираясь на параметры вашего компьютера. Я сейчас говорю про дистрибутив от компании Postgres Pro (и платный, и бесплатный настраиваются одинаково). Время инсталляции – 5 минут. Если надо разнести файлы базы, WAL и временных файлов то тогда ещё три строчки в конфигурационном файле.
Дальше давайте теперь сравним установку на Linux. В данном случае будут рассматривать CentOS.
-
Установка MS SQL-сервера на CentOS представляет собой 5 страниц инструкций с сайта Microsoft. Время инсталляции – час. В этот час будет скачиваться неслабый дистрибутив, и потом его нужно будет установить и настроить в командной строке. Время настройки – 15 минут.
-
Для самого MS SQL Server в CentOS нужно будет настроить хотя бы два параметра: это параллелизм и количество потребляемой оперативной памяти.
-
Нужно будет настроить хотя бы три параметра самой базы: как у вас база будет прирастать, какой у вас будет изначальный объем файлов базы данных и журналов транзакций, установить уровень журналирования.
-
Плюс к этому нужно будет настроить минимум две регламентных операций ухаживания за базой – реиндексация и апдейт статистики.
-
-
Устанавливая на CentOS Postgres вам придет письмо с кодом в 12 строчек. Копируете, вставляете, и через 5 минут у вас есть запущенный и готовый Postgres. Для настройки Postgres в Windows и в CentOS вам нужно провести всего четыре настройки параметров сервера СУБД и задать две регламентные операции в cron. На это уйдет максимум 15 минут.
Все эти цифры по поводу настройки и установки пока не в пользу MS SQL.
Я свято уверен, что после настройки и установки в СУБД потом постоянно что-то крутить в настройках СУБД не нужно. Анализ проблем лучше делать в технологическом журнале 1С. Техжурнал 1С покажет более полную комплексную информацию, которая будет содержать не только «тормоза» СУБД, но и «тормоза» самого движка платформы, что часто занимает гораздо более длительное время в исполнении запросов чем время, которое тратит на этот запрос СУБД. И только когда вы нашли проблему, код 1С кажется идеальным а СУБД ведёт себя странно, вот тогда уже нужно идти и смотреть планы запросов, делать выводы и может быть менять настройки, хотя лучше всё таки поменять код 1С, так как улучшив одну операцию изменением настроек СУБД можно очень легко “положить” всю систему.
Как читать OID
Вышеприведённый OID (1.3.6.1.2.1.1.5) для объекта sysName построен целиком на стандартном MIB, и будет существовать скорее всего на всех устройствах. Он читается так:
1 | iso | International Organization for Standardization (ISO) |
3 | identified-organization | |
6 | dod | United States Department of Defense (DoD). Эта организация изначально занималась стандартизацией протокола |
1 | internet | Интернет |
2 | mgmt | IETF Management |
1 | mib-2 | База OID для спецификации MIB-2 |
1 | system | Характеристики системы |
5 | sysName | Имя системы |
OID специфичного объекта для конкретного устройства, дополненный своими MIB’ами, будет значительно длиннее. Вот пример OID датчика температуры у первого вентилятора в Intel Modular Server: 1.3.6.1.4.1.343.2.19.1.2.10.206.1.1.16.1. Первые 7 параметров из стандартных MIB’ов, остальные 10 из MIB’ов Intel. Четыре первых мы уже расшифровали выше, остальные поясняются следующим образом:
4 | private | Частные проекты |
1 | enterprise | Частные организации |
343 | intel | Этот номер закреплён за компанией Intel |
2 | products | Продукты |
19 | modularsystems | Серверы линейки Modular System |
1 | multiFlexServer | Тип сервера Multi-Flex Server |
2 | components | Компоненты |
10 | chassis | Контейнер для информации об аппаратном блоке |
206 | fans | Вентиляторы |
1 | fanFruTable | Таблица вентиляторов |
1 | fanFruEntry | Информация о вентиляторе |
16 | fanFruInletTemperature | Температура возле вентилятора |
1 | датчик возле первого вентилятора |
Вся описательная информация находится как раз в текстовых файлах MIB, поэтому давайте разберёмся как их читать.
Отображение данных в строках и столбцах
Связь групп строк со строками и связь групп столбцов со столбцами подчиняются одним и тем же правилам. Ниже описано, каким образом добавить строки для отображения сведений и как группировать данные в строках в области данных табликса, однако эти же принципы применимы и к добавлению столбцов для отображения подробных и сгруппированных данных.
Для каждой строки в области данных табликса строка по отношению к каждой из групп строк находится либо внутри, либо снаружи. Если строка находится внутри группы строк, то она повторяется один раз для каждого уникального значения группы, которое называется экземпляром группы. Если строка находится за пределами группы строк, то она повторяется в этой группе всего один раз. Строки, расположенные за пределами всех групп, являются статическими и повторяются всего один раз в пределах области данных. Например, строка верхнего или нижнего колонтитула таблицы является статической. Строки, которые повторяются хотя бы в одной из групп, являются динамическими.
При наличии вложенных групп строка может находиться внутри родительской группы, но за пределами дочерней. Такая строка повторяется для каждого значения внешней группы, однако в дочерней группе отображается всего один раз. Чтобы отображались метки или итоги группы, добавьте строку за пределами группы. Чтобы отображались данные, которые отличаются для каждого экземпляра группы, добавьте строку внутри группы.
При наличии группы сведений все строки сведений находятся внутри этой группы. Эти строки повторяются для каждого значения результирующего набора запроса.
Дополнительные сведения об иерархиях групп см. в разделе Основные сведения о группах (построитель отчетов и службы SSRS).
На следующем рисунке показана область данных табликса с вложенными группами строк и группой сведений.
Для области данных табликса, в которой содержатся подробные данные, группа сведений является самой внутренней дочерней группой. Строки, добавленные в группу сведений, повторяются один раз для каждой строки результирующего набора запроса к набору данных, связанного с данной областью данных табликса. На следующем рисунке показана последняя страница отчета, готового для просмотра. На нем видны последние строки сведений и строка промежуточных итогов для последнего заказа.
Все столбцы области данных табликса подчиняются одним и тем же правилам. Например, по отношению к каждой из групп столбец может находиться либо внутри, либо снаружи. Строку итогов необходимо добавлять за пределами группы.
Чтобы удалить строки и столбцы, связанные с группой, можно удалить всю группу. При удалении группы предоставляется выбор между удалением только определения группы и удалением группы вместе со всеми связанными с ней строками и столбцами. По умолчанию удаляется только группа, а расположение строк и столбцов в области данных остается без изменений. При удалении группы со всеми связанными строками и столбцами удаляются все статические (включая верхние и нижние колонтитулы) и динамические строки и столбцы (включая экземпляры групп), связанные с этой группой.
Пошаговые инструкции по добавлению и удалению строк и столбцов см. в разделах Вставка или удаление строки (построитель отчетов и службы SSRS) и Вставка или удаление столбца (построитель отчетов и службы SSRS).
Использование столбцов валюты
С помощью столбцов валюты организация может настроить несколько валют, которые могут использоваться для строк в организации. Если организация использует несколько валют, ей обычно требуется возможность выполнять расчеты для получения значений в базовой валюте организации. При добавлении столбца валюты в таблицу, не содержащую других столбцов валюты, добавляется два дополнительных столбца:
-
Столбец подстановки Валюта, в котором можно указать любую активную валюту, настроенную в организации. Можно настроить несколько активных валют для организации в разделе Параметры > Управление бизнесом > Валюты. Можно указать валюту и валютный курс по отношению к базовой валюте, заданной для организации. При наличии нескольких активных валют можно добавить столбец валюты в форму и разрешить пользователям указывать, какая валюта должна применяться к денежным значениям для этой строки. В результате изменится отображаемое обозначение денежной единицы для столбцов валюты в форме.
Пользователи также могут изменить личные параметры, чтобы выбрать валюту по умолчанию для создаваемых строк.
-
Десятичный столбец Валютный курс, в котором представлен валютный курс для выбранной валюты, связанной с таблицей, по отношению к базовой валюте. Если этот столбец добавить в форму, пользователи смогут просматривать значение, но не смогут его изменять. Валютный курс хранится с валютой.
Для каждого добавляемого столбца валюты добавляется еще один столбец валюты с суффиксом в имени. В этом столбце хранится расчет значения добавленного столбца валюты и базовой валюты. Опять же, если этот столбец добавить в форму, его будет невозможно изменить.
При настройке столбца валюты можно выбрать значение точности. Доступно три параметра, как показано в следующей таблице.
Параметр | Описание |
---|---|
Число десятичных знаков в ценах | Это точность одной организации, используемая для цен в разделе Параметры > Администрирование > Системные параметры > Общие сведения. |
Точность валюты | Этот параметр применяет точность, определенную для валюты в строке. |
Определенные значения точности | Эти параметры позволяют определить конкретную заданную точность с помощью значений от 0 до 4. |
Формат
В каноническом текстовом представлении 16 октетов UUID представлены в виде 32 шестнадцатеричных (base-16) цифр, отображаемых в пяти группах, разделенных дефисами, в форме 8-4-4-4-12, всего 36 символов. (32 шестнадцатеричных символа и 4 дефиса). Например:
Четырехбитовые поля M и 1-3-битные поля N кодируют формат самого UUID.
Четыре бита цифры — это версия UUID, а от 1 до 3 наиболее значимых битов цифрового кода — вариант UUID. (См. ) В этом примере M равно , а N равно (10xx 2 ), что означает, что это UUID версии 1, варианта 1; то есть основанный на времени UUID DCE / RFC 4122.
Строка канонического формата 8-4-4-4-12 основана на структуре записи для 16 байтов UUID:
Имя | Длина (байты) | Длина (шестнадцатеричные цифры) | Длина (бит) | |
---|---|---|---|---|
time_low | 4 | 8 | 32 | целое число, дающее младшие 32 бита времени |
time_mid | 2 | 4 | 16 | целое число, дающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 16 | 4-битная «версия» в старших разрядах, за которыми следуют старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 16 | 1–3-разрядный «вариант» в наиболее значимых битах, за которым следует 13–15-разрядная тактовая последовательность. |
узел | 6 | 12 | 48 | 48-битный идентификатор узла |
Эти поля соответствуют полям UUID версий 1 и 2 (то есть UUID на основе времени), но одно и то же представление 8-4-4-4-12 используется для всех UUID, даже для UUID, построенных по-разному.
Идентификаторы GUID Microsoft иногда обозначаются фигурными скобками:
Этот формат не следует путать с « реестром Windows форматом», который относится к формату в фигурных скобках.
RFC 4122 определяет пространство имен Uniform Resource Name (URN) для UUID. UUID, представленный как URN, выглядит следующим образом:
Групповая обработка прикрепленных файлов
Кому не знакомы авралы в бухгалтерии, когда налоговая требует представить копии всех документов за два-три года? Кто не получал сюрпризов в виде отсутствия документов, когда завтра их нужно уже представлять проверяющим? 1С предлагает прикрепление и хранение копий документов (в том числе со сканера) в базе, а данная обработка решает вопрос их быстрой подборки, сортировки и выгрузки, а также быстрого и эффективного контроля наличия или отсутствия документов в базе с формированием реестров как выгруженных, так и отсутствующих документов.
В настоящий момент обработка бесплатна, в дальнейшем планируется платная версия с расширенными возможностями.
Скажите решительное «Нет» авралам в бухгалтерии и штрафам за несвоевременное представление документов!
4 стартмани
Кому надо переходить на Postgres
И теперь, наверное, самое важное: кому точно надо переходить на Postgres?
-
Если у вас проходит новая инсталляция продуктовой системы. Если вы ставите новую систему, я бы рекомендовал перейти хотя бы на бесплатный Postgres. Рекомендую сразу это делать на Linux. Можно и на Windows, но тут проблема не столько в том, что Postgres плохой или Windows плохой – плохо работает их связка в части файловой системы. Опять же из-за наших структур баз данных, где у нас по 30 тыс. элементов в одной таблице (7 тыс. таблиц, 25 тыс. индексов). С таким количеством файлов винда работает плохо, а Postgres хранит каждый элемент системы в отдельном файле – более того, он эти файлы разбивает по 1 Гб, для каждого файла есть отдельные служебные файлы. И так на одну базу может получиться 100-300 тысяч файлов. Когда заходишь в папку, а там 300 тыс. файлов, можете оценить скорость этой работы. Linux же с этим работает прекрасно. Поэтому, если у вас новая инсталляция продукта, надо пробовать Postgres на Linux.
-
Разработчикам 1С. В идеале, на всех ваших ноутбуках и рабочих ПК должен стоять бесплатный Postgres. И вы в идеале должны разворачивать себе клиент-серверную систему 1С. Да, возникнут вопросы, что серверные ключи для 1С дорогие. Ну купите мини-сервер на пять пользователей за 15 тыс. рублей. Почему надо? Очень часто сталкиваемся с тем, что разрабатываете вы для клиент-серверной системы. а разработка идет в файловой системе. А потом начинается… Так что разрабатывать надо на такой же системе, в которой планируете работать.
-
Если вы делаете переход с файловой. До этого мы обсуждали, что переходить на бесплатный Express бессмысленно, поскольку у вас база не влезет. Если вы разрабатываете базу с объемом в 100 Гб, и вам нужны данные для разработки, то переход на Express бессмысленен. На Postgres переходите и работаете – в том числе и на бесплатный.
-
Если вы работаете под Минкомсвязью, вам нужно брать ПО только из реестра Минкомсвязи – вам переход на PostgreSQL, причем только платный Postgres Pro. Других вариантов нет.
-
Причина, по которой в свое время моя команда перешла на Postgres – потому что я был смелый и любознательный патриот. Мы решили попробовать, реально ли наши умеют писать СУБД. Оказалось, умеют и круто. Более того, работать с техподдержкой Postgres Pro – одно удовольствие. Все люди говорят на русском, работают круглосуточно, подключаются быстро. Я такой техподдержки до сих пор ни у кого не видел. Кто хоть раз писал на [email protected] знают, какой может быть техподдержка на русском языке. А это прямо небо и земля.
Но обычно у тех, кому надо переходить на PostgreSQL, у тех и не особо болит после перехода. А кому на Postgres не надо, но они переходят – те потом начинают говорить, что ничего не работает. Ну да, если ты не готов, то, наверное, и не работает.
Бесплатный MS SQL vs бесплатный PostgreSQL
Нельзя сравнивать платный MS SQL – Standard и Enterprise – с бесплатным PostgreSQL, это не совсем корректное сравнение. Нельзя ожидать от бесплатного ПО такой же скорости, как и от платного, причем неслабо платного.
Давайте сравним бесплатную версию MS SQL Express и бесплатные версии PostgreSQL.
Бесплатные версии Postgres – это:
-
Самосборки, когда вы с сайта postgresql.org скачали исходники, добавили туда патчи для 1С и собрали свою сборку. Она бесплатна, пожалуйста, пользуйтесь.
-
То же самое можно сделать, скачав сборку, которую собрали специалисты фирмы «1С» с сайта – releases.1с.ru. Эта сборка будет отличаться от вашей самосборки тем, что она после сборки протестирована фирмой 1С.
-
Есть еще третий вариант – сайт 1с.postgres.ru. Это сборка от компании Postgres Professional – эта команда работает со своими серверами сборки, и они делают бесплатную версию для 1С. где в ванильную сборку добавляют несколько своих патчей, которые считают нужным. На то какие патчи они добавят, а какие – нет, мы с вами повлиять не можем. Но на моей практике сборка с 1с.postgres.ru работает намного стабильнее. Кто имеет доступ на партнерские форумы 1С, там есть несколько обращений, когда у людей сбоили самосборки или сборки с releases, при этом ставим сборки с 1с.postgres.ru с той же версией Postgres, и все отлично работает. Поэтому я бы советовал ставить отсюда.
Теперь давайте сравним бесплатные версии MS SQL Express и Postgres. Какие ограничения они накладывают:
-
На количество ядер.
-
MS SQL Express в последней поддерживаемой 1С 17 версии, позволяет использовать только 4 ядра.
-
бесплатный Postgres – безлимитное количество ядер.
-
-
То же самое по памяти.
-
MS SQL Express может использовать 1,5 Гб памяти и все.
-
Postgres – безлимитно.
-
-
Объем базы:
-
MS SQL Express – 10 Гб,
-
у Postgres – безлимитно.
-
-
Отказоустойчивость:
-
в MS SQL Express не поддерживается вообще.
-
В Postgres доступны логические и физические репликации любого уровня каскадирования. Вы можете одновременно делать с мастера десятки реплик. Или сделать реплику с мастера, а с реплики – еще одну (иногда это имеет смысл). Бесплатный Postgres позволит снимать бэкапы с реплики, не трогая этими задачами мастер.
-
Есть несколько важных моментов:
-
бэкап у MS SQL консистентен на момент окончания бэкапа, а бэкап Postgres’a (dump) консистентен на момент начала бэкапа.
-
Если вы сливаете этот dumpс мастера Postgres (с главного сервера), то в момент этого бэкапа вы не сможете произвести структурные изменения в 1С, так как они содержат в себе команды drop для таблиц либо удаления столбцов. Postgres не позволит изменить структуру данных в части удаления, пока он снимает dump. Этот момент нужно учитывать при проектировании системы.
-
-
-
Регламентные операции плюс бэкапы
-
На MS SQL Express регламенты можно делать только скриптами и cron. Нет там планировщика (агента SQL Server), его там не существует. Вы не сможете внутри SQL создать никаких расписаний или операций. Надо будет батнички нарисовать, засунуть это либо в cron, либо в планировщик Windows.
-
То же самое на Postgres, все регламентные операции, бэкапы и восстановления из бэкапов – это скрипты, cron или планировщик Windows, смотря в какой системе вы это делаете.
-
-
Ещё момент – бесплатные версии обоих продуктов не входят в список импортозамещающих продуктов. Компаниям госсектора эти базы данных запрещены в использовании вообще, не только в 1С.
-
Также на бесплатном Postgres и бесплатном MS SQL нет ФСТЭКа. Никто не получает сертификаты ФСТЭК на эти продукты. Забегая вперед, скажу, что и в платном MS SQL ФСТЭКа нет.
С бесплатными версиями все более менее понятно, поехали в платные версии.
Классификация
Существует несколько основных типов уникальных идентификаторов, каждый из которых соответствует своей стратегии генерации:
- серийные номера , назначаемые постепенно или последовательно центральным органом или принятой справкой.
-
случайные числа , выбранные из числового пространства, намного большего, чем максимальное (или ожидаемое) количество идентифицируемых объектов. Хотя не совсем уникальные, некоторые идентификаторы этого типа могут подходить для идентификации объектов во многих практических приложениях и, при неформальном использовании языка, по-прежнему называются «уникальными».
- Хеш-функции : на основе содержимого идентифицированного объекта, гарантируя, что эквивалентные объекты используют один и тот же UID.
- Генератор случайных чисел : основан на случайном процессе.
- имена или коды, присвоенные по выбору, которые должны быть уникальными благодаря ведению центрального реестра, такого как EPC Information Services .
- имена или коды, назначенные с использованием режима, включающего несколько (одновременных) издателей уникальных идентификаторов, каждому из которых назначаются взаимоисключающие разделы глобального адресного пространства , так что уникальные идентификаторы, назначенные каждым издателем в каждом разделе эксклюзивного адресного пространства, гарантированно являются глобально уникальными. Примеры включают (1) MAC-адрес для управления доступом к среде передачи данных, однозначно присвоенный каждому индивидуальному устройству сетевого интерфейса оборудования, произведенный производителем устройств, (2) штрих-коды потребительских товаров, присвоенные продуктам с использованием идентификаторов, присвоенных производителями, которые участвуют в стандартах идентификации GS1. и (3) уникальный и постоянный идентификатор юридического лица, присвоенный юридическому лицу одним из регистраторов LEI в Глобальной системе идентификаторов юридических лиц (GLEIS), управляемой Global LEI Foundation (GLEIF).
Вышеупомянутые методы могут быть объединены, иерархически или по отдельности, для создания других схем генерации, которые гарантируют уникальность. Во многих случаях один объект может иметь более одного уникального идентификатора, каждый из которых идентифицирует его для разных целей.
Установка RedHat Codeready Studio на ОС RedHat Enterprise Linux 8.4 (RHEL 8.4)
Red Hat CodeReady Studio — это бесплатная для участников программы RedHat Developer open source интегрированная среда (IDE), предоставляет широкий набор функционала разработки для нескольких платформ Red Hat, которые включают контейнеры CodeReady (развертывание через OpenShift4), Quarkus, JAX-RS, внедрение зависимостей контекстов (CDI) и инструменты Red Hat Fuse. Студия включает последние версии Eclipse и Web Tools Project (WTP), предоставляет инструменты для JEE и веб-разработки, такие как: инструменты Java EE, JSF и JSP; инструменты JPA; серверные инструменты; веб-сервисы и инструменты WSDL; инструменты HTML , CSS и JavaScript; инструменты XML , XML Schema и DTD. Студия Code Ready Studio также поддерживает популярные технологии, такие как Enterprise Application Platform (EAP 7.3) — платформа корпоративных приложений Red Hat, Hibernate и Wildfly 21, и обеспечивает встроенное усиление для Kubernetes, OpenShift (включая S2i), docker и клиента REST для микропрофайлов.
Столкновения
Конфликт возникает, когда один и тот же UUID генерируется более одного раза и назначается разным референтам. В случае стандартных UUID версии 1 и версии 2, использующих уникальные MAC-адреса от сетевых карт, коллизии маловероятны, с повышенной вероятностью только тогда, когда реализация отличается от стандартов, случайно или намеренно.
В отличие от UUID версии 1 и версии 2, сгенерированных с использованием MAC-адресов, с UUID версии 1 и -2, которые используют случайно сгенерированные идентификаторы узлов, UUID версии 3 и версии 5 на основе хэша и случайные UUID версии 4, коллизии могут происходить даже без проблем с реализацией, хотя и с такой малой вероятностью, что ее обычно можно игнорировать. Эта вероятность может быть точно вычислена на основе анализа проблемы дня рождения .
Например, количество случайных UUID версии 4, которые необходимо сгенерировать, чтобы иметь 50% -ную вероятность хотя бы одного столкновения, составляет 2,71 квинтиллион, вычисляемый следующим образом:
- n≈12+14+2×ln(2)×2122≈2.71×1018.{\displaystyle n\approx {\frac {1}{2}}+{\sqrt {{\frac {1}{4}}+2\times \ln(2)\times 2^{122}}}\approx 2.71\times 10^{18}.}
Это число эквивалентно генерации 1 миллиарда UUID в секунду в течение примерно 85 лет. Файл, содержащий такое количество UUID, по 16 байтов на UUID, будет около 45 эксабайт .
Наименьшее количество UUID версии 4, которое должно быть сгенерировано, чтобы вероятность обнаружения коллизии была p , аппроксимируется формулой
- 2×2122×ln11−p.{\displaystyle {\sqrt {2\times 2^{122}\times \ln {\frac {1}{1-p}}}}.}
Таким образом, вероятность найти дубликат в 103 триллионах UUID версии 4 составляет один на миллиард.