Назад | Перейти на главную страницу

Как я могу перенести четыре системных БД по умолчанию в другие разделы?

Почему я не вижу ни одной команды отсоединения / присоединения в 4 объектах системной базы данных SQL Server? Я хочу переместить его в отдельный раздел для каждого файла базы данных и файлов журнала для большей производительности.

Я должен это сделать или просто оставить его в C: \ Program Files \ Microsoft SQL Server \ MSSQL10. (Dbinstance) \ MSSQL \ DATA?

Чтобы дополнить два вышеупомянутых ответа, единственная база данных, о которой вы должны беспокоиться, - это tempdb. В приведенном ниже запросе будет указано количество операций ввода-вывода для каждой базы данных и это хороший индикатор, если tempdb выполняет больше работы по сравнению с другими. Если да, то поможет перенос tempdb на отдельные шпиндели. Вы также должны проверить, есть ли у вас узкое место выделения в tempdb, используя WAIT STATISTICS (запрос ниже) и при необходимости использовать TF 1118 и несколько файлов данных tempdb. Так что вы можете получить хорошие отзывы, если добавите больше деталей. Вы можете немного настроить первый запрос, чтобы посмотреть статистику ввода-вывода на уровне файла, а также получить большую детализацию.

--Per database write cost with running total
With g as
(select db_name(mf.database_id) as database_name, mf.physical_name, 
left(mf.physical_name, 1) as drive_letter, 
vfs.num_of_writes, 
vfs.num_of_bytes_written as BYTESWRITTEN, 
vfs.io_stall_write_ms, 
mf.type_desc, vfs.num_of_reads, vfs.num_of_bytes_read, vfs.io_stall_read_ms,
vfs.io_stall, vfs.size_on_disk_bytes
from sys.master_files mf
join sys.dm_io_virtual_file_stats(NULL, NULL) vfs
on mf.database_id=vfs.database_id and mf.file_id=vfs.file_id
)
select 
    database_name
    , sum(BYTESWRITTEN) as BYTES_WRITTEN
    , Percentage = RTRIM(CONVERT(DECIMAL(5,3),sum(BYTESWRITTEN)*100.0/(SELECT SUM(BYTESWRITTEN) FROM g)))+'%'
from g 
group by database_name
order by BYTES_WRITTEN desc

-- Isolate top waits for server instance since last restart or statistics clear
WITH Waits AS
(SELECT wait_type, wait_time_ms / 1000. AS wait_time_s,
    100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct,
    ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn
 FROM sys.dm_os_wait_stats
 WHERE wait_type NOT IN( 'BROKER_TASK_STOP', 'BROKER_TRANSMITTER',
  'SQLTRACE_BUFFER_FLUSH', 'CLR_AUTO_EVENT', 'CLR_MANUAL_EVENT', 'BROKER_EVENTHANDLER',
    'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT',
  'LAZYWRITER_SLEEP', 'SQLTRACE_WAIT_ENTRIES')) -- filter out additional irrelevant waits
SELECT W1.wait_type, 
  CAST(W1.wait_time_s AS DECIMAL(12, 2)) AS wait_time_s,
  CAST(W1.pct AS DECIMAL(12, 2)) AS pct,
  CAST(SUM(W2.pct) AS DECIMAL(12, 2)) AS running_pct
FROM Waits AS W1
INNER JOIN Waits AS W2
ON W2.rn <= W1.rn
GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct
HAVING SUM(W2.pct) - W1.pct < 95; -- percentage threshold

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

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

  1. Есть проблемы с производительностью?

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

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

Вы не можете использовать присоединение / отсоединение в системных базах данных, вместо этого вы используете операторы alter database в сочетании с изменением параметров запуска, указывающих на новое местоположение.

Вот руководство от MS о том, как переместить системные базы данных:

http://msdn.microsoft.com/en-us/library/ms345408.aspx