Ошибки

    Почему может возникать ошибка «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.

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