Перегруженные таблетки data shard

Таблетки data shard, обслуживающие строковые таблицы, могут быть перегружены по следующим причинам:

  • Таблица создана без указания параметра AUTO_PARTITIONING_BY_LOAD.

    В этом случае YDB не разбивает перегруженные таблетки data shard.

    Таблетки data shard являются однопоточными и обрабатывают запросы последовательно. Каждая таблетка data shard может принимать на выполнение до 10000 операций. Принятые запросы ожидают своей очереди на выполнение. Таким образом, чем длиннее очередь, тем выше задержка.

    Если таблетка data shard уже содержит 10000 операций в своей очереди, новые запросы будут возвращать ошибку «overloaded». Повторите такие запросы, используя экспоненциально растущий перерыв, см. Ошибки «overloaded».

  • Таблица создана с параметром AUTO_PARTITIONING_MAX_PARTITIONS_COUNT и уже достигла лимита на число партиций.

  • Неэффективный первичный ключ, который вызывает дисбаланс в распределении запросов по таблеткам data shard. Типичным примером является использование монотонно увеличивающегося первичного ключа при загрузке данных, что может привести к перегрузке «последней» партиции. Например, это может произойти с автоматически увеличивающимся первичным ключом, использующим тип данных Serial.

Диагностика

  1. Используйте Встроенный UI или Grafana, чтобы проверить, не перегружены ли узлы YDB:

    • На панели мониторинга Grafana DB overview проанализируйте диаграмму Overloaded shard count.

      Диаграмма отображает перегруженные таблетки data shard в кластере YDB, но она не показывает таблицы, в которых есть перегруженные таблетки.

      Совет

      Настройте уведомления в Grafana о перегрузках таблеток data shard.

    • Во Встроенном UI:

      1. Перейдите на вкладку Databases и выберите базу данных.

      2. На вкладке Navigation убедитесь, что база данных выбрана.

      3. Откройте вкладку Diagnostics.

      4. Откройте вкладку Top shards.

      5. На вкладках Immediate и Historical отсортируйте таблетки по колонке CPUCores и проанализируйте информацию.

      Кроме того, информация о перегруженных таблетках представлена в виде системной таблицы. Дополнительные сведения см. в разделе История перегруженных партиций.

  2. Чтобы точно определить проблему со схемой, используйте Встроенный UI или YDB CLI:

    • Во Встроенном UI:

      1. На вкладке Databases нажмите на базу данных.

      2. На вкладке Navigation выберите требуемую базу данных.

      3. Откройте вкладку Diagnostics.

      4. На вкладке Describe перейдите на страницу root > PathDescription > Table > PartitionConfig > PartitioningPolicy.

        Describe

      5. Проанализируйте значения PartitioningPolicy:

        • SizeToSplit
        • SplitByLoadSettings
        • MaxPartitionsCount

        Если в таблице не отображаются вышеперечисленные параметры, см. Рекомендации по конфигурации таблиц.

      Примечание

      Эта информация также отображается на вкладке Diagnostics > Info.

    • В YDB CLI:

      1. Чтобы получить информацию о проблемной таблице, выполните следующую команду:

        ydb scheme describe <table_name>
        
      2. В выводе команды проанализируйте Auto partitioning settings:

        • Partitioning by size
        • Partitioning by load
        • Max partitions count

        Если в таблице не указаны эти параметры, см. Рекомендации по конфигурации таблиц.

  3. Проанализируйте, монотонно ли увеличиваются значения первичного ключа:

    • Проверьте тип данных столбца первичного ключа. Типы данных Serial используются для автоматического увеличения значений.

    • Проверьте логику приложения.

    • Вычислите разницу между минимальным и максимальным значениями столбца первичного ключа. Затем сравните это значение с количеством строк в данной таблице. Если эти значения совпадают, возможно первичный ключ в этой таблице увеличивается монотонно.

    Если значения первичного ключа действительно увеличиваются монотонно, см. Рекомендации для несбалансированного первичного ключа.

Рекомендации

Для конфигурации таблиц

Рассмотрите следующие решения для устранения перегрузки таблеток data shard:

  • Если в проблемной таблице не включено партиционирование по нагрузке, включите его.

    Совет

    Партиционирование по нагрузке отключено, если на вкладке Diagnostics > Info во Встроенном UI или в выводе команды ydb scheme describe отображается строка Partitioning by load: false.

  • Если количество партиций в таблице достигло максимального лимита, увеличьте максимальный лимит партиций таблицы.

    Совет

    Чтобы определить количество партиций в таблице, см. значение PartCount на вкладке Diagnostics > Info во Встроенном UI.

Обе операции можно выполнить с помощью запроса ALTER TABLE ... SET.

Для несбалансированного первичного ключа

Рассмотрите возможность изменения первичного ключа, чтобы равномерно распределить нагрузку по партициям таблицы. Вы не можете изменить первичный ключ существующей таблицы. Для этого вам нужно будет создать новую таблицу с изменённым первичным ключом, а затем перенести данные в новую таблицу.

Примечание

Также рассмотрите возможность изменения логики вашего приложения для генерации значений первичного ключа для новых строк. Например, используйте хэши значений вместо самих значений.