- PVSM.RU - https://www.pvsm.ru -

Новый релиз PostgreSQL 9.6: вклад Postgres Professional

Сегодня, 29 сентября 2016 года, вышел [1] новый релиз PostgreSQL, получивший номер 9.6. В нём содержится много весьма полезных фич, и нельзя не рассказать о них, тем более что вклад нашей компании в этот релиз существенен. Поэтому в этой статье мы расскажем о тех разработках Postgres Pro, которые вошли в сегодняшний релиз.

Производительность и мониторинг

Улучшение представления pg_stat_activity в части информации об ожидающих процессах (Amit Kapila, Ильдус Курбангалиев).

Ранее в pg_stat_activity ожидающими считались процесссы, висящие на тяжелых (heavyweight) блокировках. Теперь там видны также ожидания легких блокировок (lightweight locks) и buffer-pins (как это по-русски?). О разных видах блокировок в постгресе можно прочитать в статье Александра Короткова [2]. Новая информация видна в колонках wait_event_type и wait_event. Подробную информацию об этом патче можно прочитать в нашем блоге [3] и в документации [4].

Эффективное использование памяти при построении GIN-индексов. (Robert Abraham, Фёдор Сигаев)

Теперь при построении GIN-индексов более эффективно используется память, если ее выделено (maintenance_work_mem) более гигабайта. Детали — в списке рассылки [5].

Немедленное освобождение удаляемых страниц GIN-индексов (Jeff Janes, Фёдор Сигаев).

Удаляемые страницы теперь сразу попадают в список свободных, что помогает сократить объем базы. Полезно при не слишком частом вакууме. Подробности в списке рассылки [6].

Эффективная обработка мертвых узлов в GiST-индексах (Анастасия Лубенникова)

Если при индексном скане обнаруживается мертвый узел таблицы, то соответствующий ему узел индекса тоже будет сразу помечен как мертвый. При вставке в индекс занимаемое им место будет использовано. Подробности в списке рассылки [7] .

Замена спинлоков на атомарные операции (Александр Коротков, Andres Freund)

Повышает вертикальную масштабируемость за счет более эффективной реализации блокировок. Подробности в статье Александра Короткова [2].

Оптимизация ожидания блокировок (Александр Алексеев)

Изменения в алгоритме ожидания блокировок, дающие заметный вклад на многопроцессорных серверах. Подробности в списке рассылки [8].

Улучшение производительности ResourceOwner (Александр Алексеев)

Линейный поиск заменен на нечто более эффективное. Подробности в списке рассылки [9].

Вычисление выражений в SELECT после ORDER и LIMIT, если это возможно (Konstantin Knizhnik)

Теперь, если результаты выражения не попадут в выдачу запроса и не участвуют в условиях выборки и группировки, оно не будет вычисляться. Это сокращает количество вызовов функций (возможно, тяжелых). Кроме того, вызов функций будет осуществляться в порядке, задаваемом ORDER BY, а иногда это важно. Подробности в списке рассылки [10].

Добавлены функции оценки селективности для contrib/intarray (Юрий Журавлев, Александр Коротков)

Это улучшает работу планировщика с запросами, в которых задействованы поля типа int[]. Подробности в списке рассылки [11].

Полнотекстовый поиск

Поиск фраз — новая возможность полнотекстового поиска (Фёдор Сигаев, Олег Бартунов, Дмитрий Иванов)

Подробности на слайдах [12] и в документации полнотекстового поиска [13].

Парсер полнотекстового поиска теперь понимает лидирующие цифры в e-mail'ах и именах хостов (Артур Закиров)

Это помогает правильно индексировать тексты, содержащие e-mail'ы и урлы. Нужно перестроить tsvector'ы, сгенерированные с использованием предыдущей версии. Подробная информация о патче — в списке рассылки [14].

Поддержка словарей Hunspell и увеличение количества поддерживаемых языков (Артур Закиров)

Подробности в списке рассылки [15] и в документации [16].

Новые полезные функции для работы с tsvector (Стас Кельвич)

Подробности в списке рассылки [17] и в документации [18].

Функции ts_stat() и tsvector_update_trigger() теперь оперируют с данными бинарно совместимых типов (Фёдор Сигаев).

Подробности в списке рассылки [19].

Расширяемость и расширения

Добавлен класс операторов в SP-GiST для типа box (Александр Лебедев)

Подробности в списке рассылки [20].

Добавление опций в ALTER OPERATOR, позволяющих указывать функции селективности для операторов (Юрий Журавлев)

Подробности в списке рассылки [21].

Новая конструкция CREATE ACCESS METHOD, позволяющая создавать индексные методы доступа в расширениях PostgreSQL (Александр Коротков, Petr Jelínek)

Подробности на слайдах [22] .

Упрощение API индексных методов доступа (Александр Коротков, Andrew Gierth)

API индексных методов доступа изменен, чтобы в большей соответствовать концепциям, используемым в FDW и Tablesample. Это упрощает C-шный код и облегчает создание новых методов доступа в устанавливаемые расширения. Количество колонок в системной таблице pg_am уменьшилось, и появились новые функции для доступа к параметрам методов доступа из SQL. Подробности на слайдах [22].

Добавлен обобщенный интерфейс для записи WAL (Александр Коротков, Petr Jelínek, Markus Nullmeier)

Это позволяет расширениям стандартизованным образом делать записи в WAL. Это позволяет расширениям определять свои типы индексов, которые автоматически будут поддерживаться механизмом WAL-логов, т.е., в частности, реплицироваться потоковой репликацией. Подробности на слайдах [22].

Классы операторов SP-GiST operator classes теперь могут сохранять некоторое значение (“traversal value”) в процессе обхода индекса (Александр Лебедев, Фёдор Сигаев)

Подробности в списке рассылки [20].

Новый модуль contrib/bloom [23] реализует метод индексного доступа на основе блумовской фильтрации (Фёдор Сигаев, Александр Коротков)

Модуль написан, в основном, для проверки новых возможностей по определению методов доступа в расширениях, но может оказаться полезным в реальных многоколоночных запросах. Подробности на слайдах [22].

В расширении contrib/cube [24] введен оператор расстояния для кубов и поддержка kNN-поиска для GiST-индексов по колонкам типа cube (Стас Кельвич)

Подробности в списке рассылки [25].

Разное

В срезе массива теперь можно не указывать левую или правую границу (Юрий Журавлев)

Например, array_col[3:]. Подробности в списке рассылки [26].

Улучшение pg_rewind [27]: возможность работы с измененной целевой линией времени (Александр Коротков)

Это позволяет, например, откатить бывшую реплику к состоянию старого мастера. Подробности в списке рассылки [28].

Улучшения модуля pageinspect [29] (Николай Шаплов)

Функция heap_page_items() модуля contrib/pageinspect’s показывает сырые данные записи. Новые функции tuple_data_split() и heap_page_item_attrs() позволяют заглянуть внутрь индивидуальных полей.

Подробности на слайдах [30].

Добавлена поддержка “похожести слов” в модуле contrib/pg_trgm [31] (Александр Коротков, Артур Закиров)

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

Подробности в списке рассылки [32].

В модуле contrib/pg_trgm [31] добавлен параметр конфигурации pg_trgm.similarity_threshold (Артур Закиров)

Порогом похожести теперь можно управлять через конфигурационный параметр. Раньше это делалось только через специальные функции set_limit() и show_limit(). Подробности в списке рассылки [32] .


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

Автор: Postgres Professional

Источник [33]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/postgresql/193888

Ссылки в тексте:

[1] вышел: https://www.postgresql.org/about/news/1703/

[2] Александра Короткова: https://habrahabr.ru/company/postgrespro/blog/270827/

[3] блоге: http://www.postgrespro.ru/blog/301/111807

[4] документации: https://postgrespro.ru/docs/postgresql/9.6/monitoring-stats#WAIT-EVENT-TABLE

[5] в списке рассылки: https://www.postgresql.org/message-id/flat/CABQqHAWYXW%2BNzAYw4uG_FnbjrdEFyRaigLRkQ7AzAtS6AbHnfA%40mail.gmail.com#CABQqHAWYXW+NzAYw4uG_FnbjrdEFyRaigLRkQ7AzAtS6AbHnfA@mail.gmail.com

[6] в списке рассылки: https://www.postgresql.org/message-id/flat/CAMkU%3D1xfE1MnGMkv655hB8jCs3PBTb4S5H%2BFnQv8kcmYzyeBDQ%40mail.gmail.com

[7] в списке рассылки: https://www.postgresql.org/message-id/flat/CAP4vRV6FcKVOpPxs_9L327FpTWz75Ly%3DJRUeY-W89amS19BzwQ%40mail.gmail.com

[8] в списке рассылки: https://www.postgresql.org/message-id/flat/20151211170001.78ded9d7@fujitsu

[9] в списке рассылки: https://www.postgresql.org/message-id/flat/20151204151504.5c7e4278@fujitsu

[10] в списке рассылки: https://www.postgresql.org/message-id/flat/9879B786-E011-44A1-91B8-54649B84106D%40postgrespro.ru

[11] в списке рассылки: https://www.postgresql.org/message-id/flat/1529951.MrgHGDLjOD%40dinodell

[12] на слайдах: http://www.pgcon.org/2016/schedule/attachments/436_pgcon-2016-fts.pdf

[13] полнотекстового поиска: https://postgrespro.ru/docs/postgresql/9.6/datatype-textsearch

[14] в списке рассылки: https://www.postgresql.org/message-id/flat/56CC9C9D.1050603%40postgrespro.ru#56CC9C9D.1050603@postgrespro.ru

[15] в списке рассылки: https://www.postgresql.org/message-id/flat/56264908.2020203@postgrespro.ru

[16] документации: https://postgrespro.ru/docs/postgresql/9.6/textsearch-dictionaries

[17] в списке рассылки: https://www.postgresql.org/message-id/flat/DBD45805-968D-48B1-992A-79F8AC7D3140@postgrespro.ru

[18] документации: https://postgrespro.ru/docs/postgresql/9.6/functions-textsearch

[19] в списке рассылки: https://www.postgresql.org/message-id/flat/EA8346F9-8F64-4837-ABE1-B383AF36E0DC@kineticode.com

[20] в списке рассылки: https://www.postgresql.org/message-id/flat/56352972.9020608%40postgrespro.ru

[21] в списке рассылки: https://www.postgresql.org/message-id/flat/3348985.V7xMLFDaJO%40dinodell

[22] на слайдах: http://www.pgcon.org/2016/schedule/attachments/421_engines.pdf

[23] contrib/bloom: https://postgrespro.ru/docs/postgresql/9.6/bloom

[24] contrib/cube: https://postgrespro.ru/docs/postgresql/9.6/cube

[25] в списке рассылки: https://www.postgresql.org/message-id/flat/9E07E159-E405-41E2-9889-A04F534FC257@gmail.com

[26] в списке рассылки: https://www.postgresql.org/message-id/flat/2987745.PueTkqGxbO@dinodell

[27] pg_rewind: https://postgrespro.ru/docs/postgresql/9.6/app-pgrewind

[28] в списке рассылки: https://www.postgresql.org/message-id/flat/CAPpHfdtaqYGz6JKvx4AdySA_ceqPH7Lki=F1HxUeNNaBRC7Mtw@mail.gmail.com

[29] pageinspect: https://postgrespro.ru/docs/postgresql/9.6/pageinspect

[30] на слайдах: https://pgconf.ru/media/2016/05/13/tuple-internals.pdf

[31] contrib/pg_trgm: https://postgrespro.ru/docs/postgresql/9.6/pgtrgm

[32] в списке рассылки: https://www.postgresql.org/message-id/flat/567461EC.4030803@postgrespro.ru#567461EC.4030803@postgrespro.ru

[33] Источник: https://habrahabr.ru/post/311352/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best