Para complementar as respostas anteriores, o único banco de dados que você deve se preocupar é o tempdb. A consulta abaixo obterá a quantidade de E / S por banco de dados e será um bom indicador se o tempdb estiver fazendo mais trabalho quando comparado a outros. Se sim, mover tempdb para separar os eixos ajudará. Você também deve verificar se você tem um gargalo de alocação no tempdb usando WAIT STATISTICS (consulta abaixo) e usar o TF 1118 e vários arquivos de dados tempdb conforme necessário. Então você pode obter boas respostas se adicionar mais detalhes. Você pode ajustar um pouco a primeira consulta para ver as estatísticas de E / S por nível de arquivo e obter mais granularidade.
--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