Должен ли я использовать снимки базы данных SQL? - PullRequest
0 голосов
/ 07 июля 2011

У меня есть система, которая должна снимать определенные таблицы в определенные моменты времени.

В настоящее время процесс, который делает моментальный снимок, запрашивает данные в таблице и помещает выходные данные в таблицу Temp (например, таблицу этапов, а не таблицу в памяти).

Многие из этих процессов могут выполняться одновременно в параллельном режиме (100+ в час). А копируемые таблицы могут работать с данными в ГБ.

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

Каковы плюсы и минусы этого подхода?

Есть ли лучший способ приблизиться к этому?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Я бы, конечно, подумал об использовании снимков, но есть несколько вещей, которые вы должны рассмотреть, прежде чем принять решение, так или иначе:

  • Снимки используют разреженные файлы для хранения данных, эффективно сохраняя только изменения в каждой таблице с момента ее создания. Чем больше строк в вашей таблице меняется, тем меньше экономия диска при простой репликации.
  • Снимки происходят со всей базой данных, а не только с одной таблицей. Поэтому, если ваша БД огромна, и вам нужно более 100 копий БД в час, это потребует много дискового пространства и производительности. С другой стороны, если вас устраивает один снимок в час для всех ваших процессов, а данные не меняются слишком сильно, снимки могут быть именно тем, что вам нужно.
  • Моментальные снимки повлияют на производительность вашей исходной БД, поскольку эти снимки необходимо постоянно обновлять с учетом того, какие данные были изменены. Если вы уже ограничены в производительности, это может быть проблемой.

Конечно, есть некоторые другие вещи, которые следует учитывать, но это неплохая отправная точка. В Книге OnLine есть довольно подробная статья об использовании Снимков, которую я прочитал бы перед тем, как принять решение. http://msdn.microsoft.com/en-us/library/ms175158%28v=SQL.90%29.aspx Там также есть раздел об ограничениях: http://msdn.microsoft.com/en-us/library/ms189940%28v=SQL.90%29.aspx

Надеюсь, это поможет.

0 голосов
/ 09 августа 2011

Если вам необходимо сделать снимок данных для целей резервного копирования / восстановления, я предлагаю вам использовать функции резервного копирования SQL Server (т. Е. Полное резервное копирование журнала транзакций).

Если ваша цель состоит в том, чтобы собирать данные из некоторой таблицы для исторических целей, вы можете реализовать несколько SQL-заданий, выполняющих что-то вроде:

select * 
into archive_table 
from normal_table

Убедитесь, что вы отключили журнал транзакций (т. Е. Установите для базы данных значение "simple") непосредственно перед этим, поскольку это значительно ускорит процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...