Preciso atualizar um banco de dados do SQL Server com cerca de 18 GB de tamanho para alterar um número significativo de TEXT
colunas para NVARCHAR(MAX)
.
O problema que estou tendo é depois de executar todos os alter table
comandos que o banco de dados acaba tendo quase 26 GB de tamanho. Entendo que a partir daqui, o uso NVARCHAR(MAX)
do DB permitirá que o DB cresça mais lentamente, mas existe alguma maneira de evitar esse inchaço?
sql-server
Aidan Lawless
fonte
fonte
Respostas:
Espero que este post seja útil para você.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Principais fatos:
Quando você altera a coluna de TEXT / NTEXT para NVARCHAR (MAX), a maneira como os dados são armazenados não é alterada; ele atualiza apenas os metadados da tabela. A estrutura de dados é alterada apenas na próxima vez que o valor for alterado. Isso pode ser feito imediatamente executando algo como isto:
Se você usar a configuração de opção de tabela padrão para NVARCHAR (MAX), os dados em sua tabela serão maiores.
- Você precisará examinar as configurações e o ambiente das opções da tabela antes de alterar a configuração para o que melhor se adequa às suas necessidades.
O tamanho da tabela eventualmente diminuirá se você seguir a instrução alter table com a instrução update table.
Em resumo, se você executar a instrução de atualização, forçando a alteração do armazenamento da estrutura de dados, o tamanho do banco de dados será menor, conforme o esperado.
EDIT : Como você mencionou TEXT e não NTEXT, seu ganho no espaço seria menos óbvio do que você imagina. O NTEXT ocupa o dobro da quantidade de espaço que o TEXT, mas, ao mesmo tempo, você deve esperar que o NVARCHAR (MAX) ocupe cerca de metade do espaço que o NTEXT. Pelo meu cálculo, você veria pouca alteração em relação ao tamanho original do banco de dados.
fonte
Pode ser um descuido na sua pergunta, mas você está dizendo TEXT para NVARCHAR (máximo) e não NTEXT para NVARCHAR (máximo). Se é isso que você realmente está fazendo, está mudando de ANSI para UNICODE e não deve se surpreender com a necessidade de mais espaço (caracteres de byte único versus caracteres de byte múltiplo).
fonte
TEXT
campo existente - o acesso ao unicode ocupa exatamente o dobro do espaço de armazenamento do ANSI.