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

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

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

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

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

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

4 ответа

Решение

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

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

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

Это, безусловно, будет лучшим усилием, чтобы "пожертвовать каждой гарантией долговечности и доступности".

Может ли что-то подобное этой работе ( док)?

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

куда R: такое ОЗУ

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

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

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

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

EXEC sp_detach_db

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

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

Чтение и запись во вновь созданный файл данных

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

Триггер присоединения базы данных

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

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