Как лучше всего использовать сжатый SQL Server? - PullRequest
0 голосов
/ 30 октября 2018

Я много читал, что сокращение базы данных не рекомендуется, поскольку это приводит к фрагментации, которая приводит к снижению производительности.

ref:

https://www.brentozar.com/archive/2017/12/whats-bad-shrinking-databases-dbcc-shrinkdatabase/

https://straightpathsql.com/archives/2009/01/dont-touch-that-shrink-button/

Но, похоже, дело в файле данных: если журнал заполнен, сжатие журнала не должно быть проблемой, верно?

если файл данных огромен и занимает много места, мне нужно больше места для вставки и обновления некоторых новых данных, уменьшение, очевидно, уменьшает размер файла на диске, который, как я предполагал, можно использовать бесплатно место для вставки новых данных. но если сокращение не рекомендуется, как мне решить эту проблему? и когда лучше всего использовать термоусадку

1 Ответ

0 голосов
/ 30 октября 2018

если файл данных огромен и занимает много места, мне нужно больше пространство для вставки и обновления некоторых новых данных, сокращение, очевидно, уменьшит размер файла на диске, который я предположил, что я мог бы использовать свободное место для вставки новых данных.

Если ваш файл данных занимает много места, это не значит, что это пространство пусто .

Вы должны использовать sp_spaceused, чтобы определить, есть ли неиспользуемое пространство в файле данных.

Если есть неиспользуемое пространство , оно будет уже использовано "для вставки и обновления некоторых новых данных", а если не будет делать shrink ничего не изменит: shrink не удаляет ваши данные, все, что он делает, это перемещает данные в начале файла, чтобы освободить место в конце, чтобы вернуть их в OS.

Сокращение файла данных может быть полезно, если у вас был файл данных объемом 2 ТБ и 1 ТБ данных были удалены, и вы не планируете вставлять еще одну ТБ данных в следующие 10 лет.

Вы можете представить свой data file как коробку 1м х 1м х 1м. Если у вас есть только половина коробки с игрушками, даже если вы не используете shrink, вы можете положить другие игрушки в эту коробку (сделать insert / update). Вместо этого shrink собирает все игрушки в одном углу, а затем разрезает вашу коробку, чтобы сделать ее размером 50 см х 50 см х 50 см. Таким образом, ваша комната (ОС) теперь имеет больше свободного места, потому что ваш ящик для игрушек занимает только половину пространства, которое он занимал до сжатия.

... И если ваша коробка уже была заполнена, вы не можете добавить больше игрушек, даже если попытаетесь сделать shrink.

если журнал заполнен, сжатие журнала не должно быть проблемой, верно?

Shrinkig log - это другой процесс, внутри него ничего нельзя перемещать log file, в этом смысле, конечно, shrink не может принести много вреда, как в случае data file: он не требует ресурсов сервера, он не вызвать любую фрагментацию и т. д. Но если это удастся или нет, это зависит от причины, по которой ваш «журнал заполнен».

Если ваш журнал заполнен из-за full model, сжатие файла журнала ничего не изменит: журнал сохраняется, чтобы дать вам возможность иметь log backup chain (или сделать возможным mirroring, или log shipping и т. д.).

Если вместо этого ваша база данных recovery model равна simple, и возникла некоторая проблема с transaction, который был открыт в течение длительного периода времени, или был огромный data loading (возможно, с полной регистрацией, такой как insert into без tablock) и ваш log file стал больше data file, и вы нашли и исправили проблему, и вам не нужен такой огромный log file, да, вы можете уменьшить его до разумного размера, и это не вредно.

...