Лучшие практики для разработки таблиц для поддержки обновления одного поля быстрее с использованием сервера SQL

Я работаю над Workflow, как система. У меня есть одна таблица задач и поле состояния. Значением статуса может быть одно из следующих: Новый, Готов, Обработка, Ошибка, Прервать, Готово.

У меня есть около 7 процессов, которые будут запускаться в зависимости от ситуации, чтобы изменить значение статуса задачи. В большинстве случаев каждый процесс будет работать со своим собственным набором данных и каждый раз обрабатывает до 5000 записей. Но я все еще вижу некоторый тупик, если данные достигают около 2 миллионов записей. Я проверяю с помощью SQL Profiler, похоже, что некоторые ресурсы страницы связаны между собой. Я не очень хорош в настройке производительности SQL Server и не очень хорошо понимаю.

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

Немного выбора может быть:

  1. Создание разделенных таблиц на основе статуса.
  2. Создать основную таблицу со статическими данными и поддерживаемой таблицей на основе статуса

Есть ли хорошая практика для такой ситуации?

Спасибо!

2 ответа

  • Вы можете разбить таблицу на основе столбца состояния. Активные записи в одном разделе. Закрытые записи в другом разделе
  • Ежемесячно вы также можете очистить закрытые записи (Удалить, если больше не требуется) или перейти к таблице архивов.
  • Разделение таблицы Я не думаю, что это был бы лучший выбор (вам не нужны многократные таблицы для той же функциональности)
  • Чтобы избежать тупика, какую версию SQL Server вы используете
  • Если вы используете SQL 2005 и выше, используйте Read Committed Snapshot Isolation для чтения зафиксированных данных. Это гарантирует, что вы читаете не блокировать записи

Я знаю, что должен публиковать ответ, но с этими вопросами ответы могут следовать:

1.) Табличные подсказки на месте? Если нет, то экспериментируйте с применением этих

2.) Используются ли все доступные индексы? TaskId столбец единственный приемлемый индекс? Иногда определенные ситуации при анализе приводят к необходимости нового индекса

3.) Являются ли все 2 миллиона записей живыми / активными в любой момент времени?

4.) Проверяли ли вы фрагментированные индексы? Ежедневное архивирование может привести к фрагментации индекса, поэтому вам может потребоваться добавить в конце задания архивирования шаг для проверки и устранения фрагментации

5.) Поле состояния для new,ready,processing,error,abort,done находится под каким типом данных?

6.) Экспериментировали ли вы с индексированными представлениями? Если вы уже знаете, что ограничиваете определенные данные и хотите избежать сканирования таблицы, это может помочь

Другие вопросы по тегам