Como posso migrar o banco de dados padrão de quatro sistemas para outras partições?

2

Por que não consigo ver nenhum comando separar / anexar nos 4 objetos do banco de dados do sistema do SQL Server? Eu quero movê-lo para partição separada para cada arquivo de banco de dados e os arquivos de log para maior desempenho.

Eu deveria fazer isso ou simplesmente deixá-lo em C: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL10. (dbinstance) \ MSSQL \ DATA?

    
por Senior Systems Engineer 16.04.2011 / 07:51

3 respostas

1

Você não pode usar anexar / desanexar nos bancos de dados do sistema, mas sim usar instruções de banco de dados alteradas, juntamente com a alteração dos parâmetros de inicialização que apontam para o novo local.

Aqui está um guia do MS sobre como mover os bancos de dados do sistema:

link

    
por 16.04.2011 / 12:47
1

Não é provável que a localização dos bancos de dados do sistema esteja causando ou causando problemas de desempenho.

Você deve responder a 2 perguntas antes de realizar esta tarefa:

  1. Existe algum problema de desempenho?

  2. A localização dos bancos de dados do sistema é a causa do problema de desempenho?

Se você não puder responder sim às duas perguntas, minha sugestão é deixar as coisas como estão.

    
por 16.04.2011 / 15:09
1

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
    
por 17.04.2011 / 20:05