2014-09-20 4 views
7

У меня есть набор тестов, который работает с базой данных в кластере SQL Server 2012. Я хочу, чтобы этот набор тестов работал как можно быстрее. Я хочу жертву каждого срока службы и гарантии доступности для исполнения. База данных воссоздается во время каждого тестового прогона, поэтому даже перезагрузка сервера не требуется.Как создать самую быструю базу данных на кластере SQL Server 2012, жертвуя любой долговечностью

Изменение модели восстановления с ALTER DATABASE [dbname] SET RECOVERY SIMPLE не имеет заметной разницы.

Хороший вариант кажется DELAYED_DURABILITY, но это новое в 2014 году и, следовательно, недоступно для меня.

Что я могу сделать, чтобы создать сумасшедшую быструю базу данных на этом кластере? Я пробовал искать базы данных в памяти, но не мог найти никаких параметров. Кластер не позволит мне создавать базу данных на локальном диске, настаивая на том, что она должна быть размещена на кластерном диске.

Обновление: Приложение использует расширенные функции SQL Server, поэтому я, скорее всего, придерживаюсь MS SQL Server. Сама база данных довольно мала, поскольку она предназначена для тестирования (8 МБ mdf, 1 МБ ldf). Узлы кластера являются самыми быстрыми серверами в сети, поэтому, если я могу злоупотреблять одним из этих узлов для базы данных в памяти, которая, несомненно, будет самой быстрой. Но как?

+0

Установить SQL Server Express на отдельный сервер? – Max

+0

Я использовал LocalDB, который является SQL Server Express, я считаю. Поскольку сервер, на котором выполняются тесты, медленнее, набор тестов фактически занимает (незначительно) больше времени. – molf

+1

SQL Server 2014 - единственная версия SQL Server, которая позволяет откладывать и не долговечность. Но если вы не заботитесь о долговечности и доступности, почему вы используете кластеризацию? –

ответ

3

Если по какой-либо причине вы застряли на кластерном экземпляре сервера sql, но не хотите долговечности, возможно, вы можете запустить приложение на tempdb. Tempdb можно разместить на локальном хранилище, чтобы избежать накладных расходов кластера.

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

Вы можете реализовать это решение, написав все ваши объекты базы данных и используя текстовый редактор, чтобы заменить имя вашей базы данных на «tempdb». Затем выполните этот скрипт, чтобы создать все объекты на tempdb. Также установите начальный каталог пользователя, запускающего приложение, в tempdb и/или отредактируйте необходимые строки подключения. Имейте в виду, что tempdb регенерируется каждый раз, когда экземпляр перезапускается. Таким образом, вы потеряете все данные и изменения ddl.

Это было бы превосходным стремлением «пожертвовать каждой гарантией долговечности и доступности».

1

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

Вам необходимо создать общую папку, размещенную на локальном диске для кластера; Затем создайте свою базу данных с помощью патча UNC (например: \\ share \ DATA \ data.mdf); В 2012 году не должно быть ограничений для этого, в 2008 году вам нужно было использовать флаг 1807 трассировки;

2

Возможно, что-то вроде этой работы (doc)?

CREATE DATABASE Sales 
ON 
(NAME = Sales_dat, 
    FILENAME = 'R:\saledat.mdf', 
    SIZE = 10, 
    MAXSIZE = 50, 
    FILEGROWTH = 5) 

Где R: является RAM Drive

1

Используйте технику, называемую непрерывной Attach-Detach, чтобы быстро почти-на лету базы данных:

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

EXEC sp_detach_db

на этом этапе Сервер SQL предполагает, что вы его сбросили. Теперь attach к уже существующему файлу, используя что-то вроде следующего: EXEC sp_attach_db @dbname = N'myD», @ filename1 = N'myCurrentPath», @ filename2 = N'pathToNewFile»

OK. Это было легко, но как создаются эти новые файлы, которые я прикрепляю к моей базе данных? Через очень небольшой и очень простой консольного приложения .NET Csharp, который прочитал содержимое вашей .mdf и .LDF в память раз и записывает его на ваш выбор файла:

Read and Write to a Newly Created Data File

Как все ситуация срабатывает? Приложить триггер базы данных с помощью DDL triggers, как описано в

Attach Database trigger

Ключевой момент прикрепляет к уже существующему файлу, который был считан (один раз) -Write [много времени] в память [Использование программы выбора, CSharp например], чтобы вы могли прикрепить свою базу данных без дополнительных накладных расходов.