Список изменений YDB Server
Версия 24.1
Дата выхода: 31 июля 2024.
Функциональность:
- Реализована Knn UDF для точного поиска ближайших векторов.
- Разработан gRPC сервис QueryService, обеспечивающий возможность выполнения всех типов запросов (DML, DDL) и выборку неограниченных объёмов данных.
- Реализована интеграция с LDAP протоколом и возможность получения перечня групп из внешних LDAP-каталогов.
Встроенный UI:
- Добавлен дашборд диагностики потребления ресурсов, который находится на вкладке с информацией о базе данных и позволяет определить текущее состояние потребление основных ресурсов: ядер процессора, оперативной памяти и места в сетевом распределенном хранилище.
- Добавлены графики для мониторинга основных показателей работы кластера YDB.
Производительность:
- Оптимизированы таймауты сессий сервиса координации от сервера до клиента. Ранее таймаут составлял 5 секунд, что в худшем случае приводило к определению неработающего клиента (и освобождению удерживаемых им ресурсов) в течение 10 секунд. В новой версии время проверки зависит от времени ожидания сеанса, что обеспечивает более быстрое реагирование при смене лидера или захвате распределённых блокировок.
- Оптимизировано потребление CPU репликами SchemeShard, особенно при обработке быстрых обновлений для таблиц с большим количеством партиций.
Исправления ошибок:
- Исправлена ошибка возможного переполнения очереди, Change Data Capture резервирует емкость очереди изменений при первоначальном сканировании.
- Исправлена потенциальная взаимоблокировка между получением записей CDC и их отправкой.
- Исправлена проблема потери очереди задач медиатора при переподключении медиатора, исправление позволяет обработать очередь задач медиатора при ресинхронизации.
- Исправлена редко возникающая ошибка, когда при включённых и используемых волатильных транзакциях возвращался успешный результат подтверждения транзакции до того, как она была успешно закоммичена. Волатильные транзакции по умолчанию выключены, находятся в разработке.
- Исправлена редко возникающая ошибка, приводившая к потере установленных блокировок и успешному подтверждению транзакций, которые должны были завершиться ошибкой Transaction Locks Invalidated.
- Исправлена редкая ошибка, приводящая к возможному нарушению гарантий целостности данных при конкурентной записи и чтении данных по определённому ключу.
- Исправлена проблема, из-за которой реплики для чтения переставали обрабатывать запросы.
- Исправлена редкая ошибка, которая могла привести к аварийному завершению процессов базы данных при наличии неподтверждённых транзакций над таблицей в момент её переименования.
- Исправлена ошибка в логике определения статуса статической группы, когда статическая группа не помечалась нерабочей, хотя должна была.
- Исправлена ошибка частичного коммита распределённой транзакции с незакоммиченными изменениями в случае некоторых гонок с рестартами.
- Исправлены аномалии с чтением устаревших данных, которые были обнаружены с помощью Jepsen.
Версия 23.4
Дата выхода: 14 мая 2024.
Производительность
- Исправлена проблема повышенного потребления вычислительных ресурсов актором топиков
PERSQUEUE_PARTITION_ACTOR
. - Оптимизировано использование ресурсов репликами SchemeBoard. Наибольший эффект заметен при модификации метаданных таблиц с большим количеством партиций.
Исправления ошибок
- Исправлена ошибка возможной неполной фиксации накопленных изменений при использовании распределенных транзакций. Данная ошибка возникает при крайне редкой комбинации событий, включающей в себя перезапуск таблеток, обслуживающих вовлеченные в транзакцию партиции таблиц.
- Устранена гонка между процессами слияния таблиц и сборки мусора, из-за которой сборка мусора могла завершиться ошибкой нарушения инвариантов и, как следствие, аварийным завершением серверного процесса
ydbd
. - Исправлена ошибка в Blob Storage, из-за которой информация о смене состава группы хранения могла не поступать своевременно на отдельные узлы кластера. В результате в редких случаях могли блокироваться операции чтения и записи данных, хранящихся в затронутой группе, и требовалось ручное вмешательство администратора.
- Исправлена ошибка в Blob Storage, из-за которой при корректной конфигурации могли не запускаться узлы хранения данных. Ошибка проявлялась для систем с явным образом включенной экспериментальной функцией "blob depot" (по умолчанию эта функция выключена).
- Исправлена ошибка, возникавшая в некоторых ситуациях записи в топик с пустым
producer_id
при выключенной дедупликации. Она могла приводить к аварийному завершению серверного процессаydbd
. - Исправлена проблема, приводящая к падению процесса
ydbd
из-за ошибочного состояния сессии записи в топик. - Исправлена ошибка отображения метрики количества партиций в топике, ранее в ней отображалось некорректное значение.
- Устранены утечки памяти, которые проявлялись при копировании данных топиков между кластерами YDB. Они могли приводить к завершению серверных процессов
ydbd
из-за исчерпания доступной оперативной памяти.
Версия 23.3
Дата выхода: 12 октября 2023.
Функциональность
- Реализована видимость собственных изменений внутри транзакций. Ранее при попытке прочитать данные, уже модифицированные в текущей транзакцией, запрос завершался ошибкой. Это приводило к необходимости упорядочивать чтения и записи внутри транзакции. С появлением видимости собственных изменений эти ограничения снимаются, и запросы могут читать измененные в данной транзакции строчки.
- Добавлена поддержка колоночных таблиц. Колоночные таблицы хорошо подходят для работы с аналитическими запросами (Online Analytical Processing), так как при выполнении запроса считываются только те столбцы, которые непосредственно участвуют в запросе. Колоночные таблицы YDB позволяют создавать аналитические отчёты с производительностью, сопоставимой со специализированными аналитическими СУБД.
- Добавлена поддержка Kafka API для топиков. Теперь с YDB-топиками можно работать через Kafka-совместимый API, предназначенный для миграции существующих приложений. Обеспечена поддержка протокола Kafka версии 3.4.0.
- Добавлена возможность записи в топик без дедупликации. Такой вид записи хорошо подходит для случаев, когда порядок обработки сообщений не критичен. Запись без дедупликации работает быстрее и потребляет меньше ресурсов на сервере, но упорядочение и дедупликация сообщений на сервере не происходит.
- В YQL добавлены возможности создавать, изменять и удалять топики.
- Добавлена возможность назначать и отзывать права доступа с помощью команд YQL GRANT и REVOKE.
- Добавлена возможность логгировать DML-операции в аудитном логе.
- (Экспериментально) При записи сообщений в топик теперь можно передавать метаданные. Для включения этой функциональности добавьте
enable_topic_message_meta: true
в конфигурационный файл. - (Экспериментально) Добавлена возможность чтения из топиков и запись в таблицу в рамках одной транзакции. Новая возможность упрощает сценарий переноса данных из топика в таблицу. Для её включения добавьте
enable_topic_service_tx: true
в конфигурационный файл. - (Экспериментально) Добавлена поддержка совместимости с PostgreSQL. Новый механизм позволяет выполнять SQL запросы в PostgreSQL диалекте на инфраструктуре YDB с использованием сетевого протокола PostgreSQL. Можно использовать привычные инструменты работы с PostgreSQL, такие, как psql и драйверы (pq для Golang и psycopg2 для Python), а также разрабатывать запросы на привычном PostgreSQL синтаксисе с горизонтальной масштабируемостью и отказоустойчивость YDB.
- (Экспериментально) Добавлена поддержка федеративных запросов. Она позволяет получать информацию из различных источников данных без их переноса в YDB. Поддерживается взаимодействие с ClickHouse, PostgreSQL, S3 через YQL-запросы без дублирования данных между системами.
Встроенный UI
- В настройках селектора типа запроса добавлена новая опция
PostgreSQL
, которая доступна при включении параметраEnable additional query modes
. Также в истории запросов теперь учитывается синтаксис, используемый при выполнении запроса. - Обновлен шаблон YQL-запроса для создания таблицы. Добавлено описание доступных параметров.
- Сортировка и фильтрация для таблиц Storage и Nodes вынесена на сервер. Необходимо включить параметр
Offload tables filters and sorting to backend
в разделе экспериментов, чтобы использовать данный функционал. - В контекстное меню были добавлены кнопки для создания, изменения и удаления топиков.
- Добавлена сортировка по критичности для всех issues в дереве в
Healthcheck
.
Производительность
- Реализованы итераторные чтения. Новая функциональность позволяет разделить чтения и вычисления между собой. Итераторные чтения позволяют даташардам увеличить пропускную способность читающих запросов.
- Оптимизирована производительность записи в топики YDB.
- Улучшена балансировка таблеток при перегрузке нод.
Исправления ошибок
- Исправлена ошибка возможной блокировки читающими итераторами снепшотов, о которых не знают координаторы.
- Исправлена утечка памяти при закрытии соединения в kafka proxy.
- Исправлена ошибка, при которой снепшоты, взятые через читающие итераторы, могут не восстанавливаться на рестартах.
- Исправлен некорректный residual предикат для условия
IS NULL
на колонку. - Исправлена срабатывающая проверка
VERIFY failed: SendResult(): requirement ChunksLimiter.Take(sendBytes) failed
. - Исправлен
ALTER TABLE
поTTL
для колоночных таблиц. - Реализован
FeatureFlag
, который позволяет отключать/включать работу сCS
иDS
. - Исправлено различие координаторного времени между 23-2 и 23-3 на 50мс.
- Исправлена ошибка, при которой ручка
storage
возвращала лишние группы, когда в запросе параметрnode_id
воviewer backend
. - Добавлен
usage
фильтр в/storage
воviewer backend
. - Исправлена ошибка в Storage v2, при которой возвращалось некорректное число в
Degraded
. - Исправлена отмена подписки от сессий в итераторных чтениях при рестарте таблетки.
- Исправлена ошибка, при которой во время роллинг-рестарта при походе через балансер моргает
healthcheck
алертами про storage. - Обновлены метрики
cpu usage
в ydb. - Исправлено игнорирование
NULL
при указанииNOT NULL
в схеме таблицы. - Реализован вывод записей об операциях
DDL
в общий лог. - Реализован запрет для команды
ydb table attribute add/drop
работать с любыми объектами, кроме таблиц. - Отключён
CloseOnIdle
дляinterconnect
. - Исправлено задваивание скорости чтения в UI.
- Исправлена ошибка, при которой могли теряться данные на
block-4-2
. - Добавлена проверка имени топика.
- Исправлен возможный
deadlock
в акторной системе. - Исправлен тест
KqpScanArrowInChanels::AllTypesColumns
. - Исправлен тест
KqpScan::SqlInParameter
. - Исправлены проблемы параллелизма для OLAP-запросов.
- Исправлена вставка
ClickBench parquet
. - Добавлен недостающий вызов
CheckChangesQueueOverflow
в общемCheckDataTxReject
. - Исправлена ошибка возврата пустого статуса при вызовах
ReadRows API
. - Исправлен некорректны ретрай экспорта в финальной стадии.
- Исправлена проблема с бесконечной квотой на число записей в CDC-топике.
- Исправлена ошибка импорта колонки
string
иparquet
в колонкуstring
OLAP. - Исправлено падение
KqpOlapTypes.Timestamp
под tsan. - Исправлено падение во
viewer backend
при попытке выполнить запрос к базе из-за несовместимости версий. - Исправлена ошибка, при которой
viewer
не возвращал ответ отhealthcheck
из-за таймаута. - Исправлена ошибка, при которой в Pdisk'ах могло сохраняться некорректное значение
ExpectedSerial
. - Исправлена ошибка, при которой ноды базы падают по
segfault
в S3 акторе. - Исправлена гонка в
ThreadSanitizer: data race KqpService::ToDictCache-UseCache
. - Исправлена гонка в
GetNextReadId
. - Исправлено завышение результата
SELECT COUNT(*)
сразу после импорта. - Исправлена ошибка, при которой
TEvScan
мог вернуть пустой набор данных в случае сплита даташарда. - Добавлен отдельный issue/код ошибки в случае исчерпания доступного места.
- Исправлена ошибка
GRPC_LIBRARY Assertion failed
. - Исправлена ошибка, при которой при чтении по вторичному индексу в сканирующих запросах получался пустой результат.
- Исправлена валидация
CommitOffset
вTopicAPI
. - Уменьшено потребление
shared cache
при приближении к OOM. - Смержена логика планировщиков из
data executer
иscan executer
в один класс. - Добавлены ручки
discovery
иproxy
в процесс выполненияquery
воviewer backend
. - Исправлена ошибка, при которой ручка
/cluster
возвращает название корневого домена типа/ru
воviewer backend
. - Реализована схема бесшовного обновления табличек для
QueryService
. - Исправлена ошибка, при которой
DELETE
возвращал данные и НЕ удалял их. - Исправлена ошибка работы
DELETE ON
вquery service
. - Исправлено неожиданное выключение батчинга в дефолтных настройках схемы.
- Исправлена срабатывающая проверка
VERIFY failed: MoveUserTable(): requirement move.ReMapIndexesSize() == newTableInfo->Indexes.size()
. - Увеличен дефолтный таймаут grpc-сриминга.
- Исключены неиспользуемые сообщения и методы из
QueryService
. - Добавлена сортировка по
Rack
в/nodes
воviewer backend
. - Исправлена ошибка, при которой запрос с сортировкой возвращает ошибку при убывании.
- Исправлено взаимодействие
KQP
сNodeWhiteboard
. - Удалена поддержка старых форматов параметров.
- Исправлена ошибка, при которой
DefineBox
не применялся для дисков, на которых есть статическая группа. - Исправлена ошибка
SIGSEGV
в диннодах при импортеCSV
черезYDB CLI
. - Исправлена ошибка с падением при обработке
NGRpcService::TRefreshTokenImpl
. - Реализован
gossip
протокол обмена информацией о ресурсах кластера. - Исправлена ошибка
DeserializeValuePickleV1(): requirement data.GetTransportVersion() == (ui32) NDqProto::DATA_TRANSPORT_UV_PICKLE_1_0 failed
. - Реализованы автоинкрементные колонки.
- Использовать статус
UNAVAILABLE
вместоGENERIC_ERROR
при ошибке идентификации шарда. - Добавлена поддержка
rope payload
вTEvVGet
. - Добавлено игнорирование устаревших событий.
- Исправлено падение write-сессий на невалидном имени топика.
- Исправлена ошибка
CheckExpected(): requirement newConstr failed, message: Rewrite error, missing Distinct((id)) constraint in node FlatMap
. - Включён
safe heal
по умолчанию.
Версия 23.2
Дата выхода: 14 августа 2023.
Функциональность
- (Экспериментально) Реализована видимость собственных изменений. При включении этой функции вы можете читать измененные значения из текущей транзакции, которая еще не была закоммичена. Также эта функциональность позволяет выполнять несколько модифицирующих операций в одной транзакции над таблицей с вторичными индексами. Для включения этой функциональности добавьте
enable_kqp_immediate_effects: true
в секциюtable_service_config
в конфигурационный файл. - (Экспериментально) Реализованы итераторные чтения. Эта функциональность позволяет разделить чтения и вычисления между собой. Итераторные чтения позволяют даташардам увеличить пропускную способность читающих запросов. Для включения этой функциональности добавьте
enable_kqp_data_query_source_read: true
в секциюtable_service_config
в конфигурационный файл.
Встроенный UI
- Улучшена навигация:
- Кнопки переключения между режимами диагностики и разработки вынесены на левую панель.
- На всех страницах добавлены хлебные крошки.
- На странице базы данных информация о группах хранения и узлах базы перенесена во вкладки.
- История и сохраненные запросы перенесены во вкладки над редактором запросов.
- На вкладках Info для объектов схемы настройки выведены в терминах конструкции
CREATE
илиALTER
. - Поддержано отображение колоночных таблиц в дереве схемы.
Производительность
-
Для сканирующих запросов реализована возможность эффективного поиска отдельных строк с использованием первичного ключа или вторичных индексов, что позволяет во многих случаях значительно улучшить производительность. Как и в обычных запросах, для использования вторичного индекса необходимо явно указать его имя в тексте запроса с использованием ключевого слова
VIEW
. -
(Экспериментально) Добавлена возможность управлять системными таблетками базы (SchemeShard, Coordinators, Mediators, SysViewProcessor) её собственному Hive'у, вместо корневого Hive'а, и делать это сразу в момент создания новой базы. Без этого флага системные таблетки новой базы создаются в корневом Hive'е, что может негативно сказаться на его загруженности. Включение этого флага делает базы полностью изолированными по нагрузке, что может быть особенно актуально для инсталляций, состоящих из ста и более узлов. Для включения этой функциональности добавьте
alter_database_create_hive_first: true
в секциюfeature_flags
в конфигурационный файл.
Исправления ошибок
- Исправлена ошибка в автоконфигурации акторной системы, в результате чего вся нагрузка ложится на системный пул.
- Исправлена ошибка, приводящая к полному сканированию при поиске по префиксу первичного ключа через
LIKE
. - Исправлены ошибки при взаимодействии с фолловерами даташардов.
- Исправлены ошибки при работе с памятью в колоночных таблицах.
- Исправлена ошибки при обработке условий для immediate-транзакций.
- Исправлена ошибка в работе итераторных чтений на фолловерах даташардов.
- Исправлена ошибка, приводящая к лавинообразной переустановке сессий доставки данных до асинхронных индексов
- Исправлены ошибки в оптимизаторе в сканирующих запросах
- Исправлена ошибка некорректного расчёта потребления хранилища hive'ом после расширения базы
- Исправлена ошибка зависания операций от несуществующих итераторов
- Исправлены ошибки при чтении диапазона на
NOT NULL
колонке - Исправлена ошибка зависания репликации VDisk'ов
- Исправлена ошибка в работе опции
run_interval
в TTL
Версия 23.1
Дата выхода 5 мая 2023. Для обновления до версии 23.1 перейдите в раздел Загрузки.
Функциональность
- Добавлено первоначальное сканирование таблицы при создании потока изменений CDC. Теперь можно выгрузить все данные, которые существуют на момент создания потока.
- Добавлена возможность атомарной замены индекса. Теперь можно атомарно и прозрачно для приложения подменить один индекс другим заранее созданным индексом. Замена выполняется без простоя.
- Добавлен аудитный лог — поток событий, который содержит информацию обо всех операциях над объектами YDB.
Производительность
- Улучшены форматы передачи данных между стадиями исполнения запроса, что ускорило SELECT на запросах с параметрами на 10%, на операциях записи — до 30%.
- Добавлено автоматическое конфигурирование пулов акторной системы в зависимости от их нагруженности. Это повышает производительность за счет более эффективного совместного использования ресурсов ЦПУ.
- Оптимизирована логика применения предикатов — выполнение ограничений с использованием OR и IN с параметрами автоматически переносится на сторону DataShard.
- (Экспериментально) Для сканирующих запросов реализована возможность эффективного поиска отдельных строк с использованием первичного ключа или вторичных индексов, что позволяет во многих случаях значительно улучшить производительность. Как и в обычных запросах, для использования вторичного индекса необходимо явно указать его имя в тексте запроса с использованием ключевого слова
VIEW
. - Реализовано кеширование графа вычисления при выполнении запросов, что уменьшает потребление ЦПУ при его построении.
Исправления ошибок
- Исправлен ряд ошибок в реализации распределенного хранилища данных. Мы настоятельно рекомендуем всем пользователям обновиться на актуальную версию.
- Исправлена ошибка построения индекса на not null колонках.
- Исправлен подсчет статистики при включенном MVCC.
- Исправлены ошибки с бэкапами.
- Исправлена гонка во время сплита и удаления таблицы с CDC.
Версия 22.5
Дата выхода 7 марта 2023. Для обновления до версии 22.5 перейдите в раздел Загрузки.
Что нового
- Добавлены параметры конфигурации потока изменения для передачи дополнительной информации об изменениях в топик.
- Добавлена поддержка переименования для таблиц с включенным TTL.
- Добавлено управление временем хранения записей для потока изменений.
Исправления ошибок и улучшения
- Исправлена ошибка при вставке 0 строк операцией BulkUpsert.
- Исправлена ошибка при импорте колонок типа Date/DateTime из CSV.
- Исправлена ошибка импорта данных из CSV с разрывом строки.
- Исправлена ошибка импорта данных из CSV с пустыми значениями.
- Улучшена производительность Query Processing (WorkerActor заменен на SessionActor).
- Компактификация DataShard теперь запускается сразу после операций split или merge.
Версия 22.4
Дата выхода 12 октября 2022. Для обновления до версии 22.4 перейдите в раздел Загрузки.
Что нового
-
YDB Topics и Change Data Capture (CDC):
- Представлен новый Topic API. Топик YDB — это сущность для хранения неструктурированных сообщений и доставки их различным подписчикам.
- Поддержка нового Topic API добавлена в YDB CLI и SDK. Topic API предоставляет методы потоковой записи и чтения сообщений, а также управления топиками.
- Добавлена возможность захвата изменений данных таблицы с отправкой сообщений об изменениях в топик.
-
SDK:
- Добавлена возможность взаимодействовать с топиками в YDB SDK.
- Добавлена официальная поддержка драйвера database/sql для работы с YDB в Golang.
-
Embedded UI:
- Поток изменений CDC и вторичные индексы теперь отображаются в иерархии схемы базы данных как отдельные объекты.
- Улучшена визуализация графического представления query explain планов.
- Проблемные группы хранения теперь более заметны.
- Различные улучшения на основе UX-исследований.
-
Query Processing:
- Добавлен Query Processor 2.0 — новая подсистема выполнения OLTP-запросов со значительными улучшениями относительно предыдущей версии.
- Улучшение производительности записи составило до 60%, чтения до 10%.
- Добавлена возможность включения ограничения NOT NULL для первичных ключей в YDB во время создания таблиц.
- Включена поддержка переименования вторичного индекса в режиме онлайн без остановки сервиса.
- Улучшено представление query explain, которое теперь включает графы для физических операторов.
-
Core:
- Для read-only транзакций добавлена поддержка консистентного снапшота, который не конфликтует с пишущими транзакциями.
- Добавлена поддержка BulkUpsert для таблиц с асинхронными вторичными индексами.
- Добавлена поддержка TTL для таблиц с асинхронными вторичными индексами.
- Добавлена поддержка сжатия при экспорте данных в S3.
- Добавлен audit log для DDL statements.
- Поддержана аутентификация со статическими учетными данными.
- Добавлены системные таблицы для диагностики производительности запросов.