Почему я не вижу ни одной команды отсоединения / присоединения в 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 вопроса:
Есть проблемы с производительностью?
Является ли расположение системных баз данных причиной указанной проблемы с производительностью?
Если вы не можете ответить утвердительно на оба вопроса, я предлагаю оставить все как есть.
Вы не можете использовать присоединение / отсоединение в системных базах данных, вместо этого вы используете операторы alter database в сочетании с изменением параметров запуска, указывающих на новое местоположение.
Вот руководство от MS о том, как переместить системные базы данных: