Ошибки
- Почему может возникать ошибка «Status: OVERLOADED Error: Pending previous query completion» в C++ SDK?
- Что делать, если я часто получаю ошибку «Transaction locks invalidated»?
- Почему возникает ошибка «Exceeded maximum allowed number of active transactions»?
- Что делать, если при запросе я получаю ошибку «Datashard: Reply size limit exceeded»?
- Что делать, если при запросе я получаю ошибку «Datashard program size limit exceeded»?
Почему может возникать ошибка «Status: OVERLOADED Error: Pending previous query completion» в C++ SDK?
Q: При запуске двух запросов, пытаюсь получить ответ из фьючера от второго из них. Получаю: Status: OVERLOADED Why: <main>: Error: Pending previous query completion
.
A: Сессия в SDK однопоточная. Если нужно параллельно использовать несколько запросов, нужно создавать несколько сессий.
Что делать, если я часто получаю ошибку «Transaction locks invalidated»?
Обычно при получении этой ошибки следует повторить выполнение транзакции, так как YDB использует оптимистичные блокировки. Если такая ошибка возникает часто, это означает, что в транзакции читается большое количество строк или, что много транзакций конкурируют за одни и те же «горячие» строки. Имеет смысл просмотреть запросы, выполняющиеся в транзакции и определить, не читают ли они лишние строки.
Почему возникает ошибка «Exceeded maximum allowed number of active transactions»?
В логике на клиентской стороне надо стараться держать как можно более короткие транзакции.
В рамках сессии разрешено не более 10 активных транзакций. При старте транзакции нужно использовать либо коммит-флаг для автокоммита, либо явный коммит/роллбек.
Что делать, если при запросе я получаю ошибку «Datashard: Reply size limit exceeded»?
Данная ошибка означает, что при выполнении запроса с одного из участвующих в нем даташардов была попытка вернуть более 50 МБ данных, что превышает допустимый лимит.
Рекомендации:
- Общая рекомендация — уменьшить объем данных, обрабатываемых в транзакции.
- Если выполняется операция
Join
, стоит убедиться, что она выполняется способом Index lookup Join. - Если осуществляется простая выборка, стоит убедиться, что она делается по ключам, или добавить
LIMIT
в запрос.
Что делать, если при запросе я получаю ошибку «Datashard program size limit exceeded»?
Данная ошибка означает, что размер программы (в сумме со значениями параметров) для одного из даташардов превысил лимит в 50 МБ. Чаще всего это означает попытку записать в таблицы базы более 50 МБ данных в одной транзакции. В качестве записей учитываются все модифицирующие операции в транзакции, такие как UPSERT
, REPLACE
, INSERT
, UPDATE
.
Необходимо уменьшить суммарных объем записей в одной транзакции. В общем случае не рекомендуется объединять в единую транзакцию запросы, которые логически не требуют транзакционности. В случае добавления/обновления данных батчами, рекомендуется уменьшить размер одного батча до значений, не превышающих нескольких мегабайт.