最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

為什么你不要收縮數(shù)據(jù)庫文件(國外翻譯)

 更新時間:2018年03月15日 20:30:35   作者:瀟湘隱者博客  
這幾天查看了很多關(guān)于SQL SERVER收縮數(shù)據(jù)文件方面的文章,準(zhǔn)備寫一篇關(guān)于收縮日志方面的文章,但是突然有種沖動將看過經(jīng)典的文章翻譯出來,需要的朋友可以參考下

前言,這幾天查看了很多關(guān)于SQL SERVER收縮數(shù)據(jù)文件方面的文章,準(zhǔn)備寫一篇關(guān)于收縮日志方面的文章,但是突然有種沖動將看過經(jīng)典的文章翻譯出來,下面這篇文章是翻譯的是Paul Randal – “Why You Should Not Shrink Your Data Files”。有些比較難以翻譯、清晰的地方,我會貼上原文。好了,不啰嗦了,直接看下面的翻譯吧。 

  我最大的一個熱點問題是關(guān)于收縮數(shù)據(jù)文件,雖然在微軟的時候,我自己寫了相關(guān)收縮數(shù)據(jù)文件代碼,我再也沒有機(jī)會去重寫它,讓它操作起來更方便。我真的不喜歡收縮。

  現(xiàn)在,不要混淆了收縮事務(wù)日志文件和收縮數(shù)據(jù)文件,當(dāng)事務(wù)日志文件的增長失控或為了移除過多的VLF碎片(這里這里看到金佰利的優(yōu)秀文章),然而,收縮事務(wù)日志數(shù)據(jù)文件不要頻繁使用(罕見的操作)并且不應(yīng)是你執(zhí)行定期維護(hù)計劃的一部分。

  收縮數(shù)據(jù)文件應(yīng)該執(zhí)行得甚至更少。這就是為什么——數(shù)據(jù)文件收縮導(dǎo)致產(chǎn)生了大量索引碎片,讓我用一個簡單并且你可以運(yùn)行的腳步來演示。下面的腳本將會創(chuàng)建一個數(shù)據(jù)文件,創(chuàng)建一個10MB大小的“filler”表,一個10MB大小的“production”聚簇索引,然后分析新建的聚集索引的碎片情況。 

USE [master];
GO
 
IF DATABASEPROPERTYEX(N'DBMaint2008', N'Version') IS NOT NULL
  DROP DATABASE [DBMaint2008];
GO
 
CREATE DATABASE DBMaint2008;
GO
USE [DBMaint2008];
GO
 
SET NOCOUNT ON;
GO
 
-- Create the 10MB filler table at the 'front' of the data file
CREATE TABLE [FillerTable](
  [c1] INT IDENTITY,
  [c2] CHAR (8000) DEFAULT 'filler');
GO
 
-- Fill up the filler table
INSERT INTO [FillerTable] DEFAULT VALUES;
GO 1280
 
-- Create the production table, which will be 'after' the filler table in the data file
CREATE TABLE [ProdTable](
  [c1] INT IDENTITY,
  [c2] CHAR (8000) DEFAULT 'production');
CREATE CLUSTERED INDEX [prod_cl] ON [ProdTable]([c1]);
GO
 
INSERT INTO [ProdTable] DEFAULT VALUES;
GO 1280
 
-- Check the fragmentation of the production table
SELECT
  [avg_fragmentation_in_percent]
FROM sys.dm_db_index_physical_stats(
  DB_ID(N'DBMaint2008'), OBJECT_ID(N'ProdTable'), 1, NULL, 'LIMITED');
GO

執(zhí)行結(jié)果如下

clipboard

聚集索引的邏輯碎片在收縮數(shù)據(jù)文件前大約接近0.4%。[但是我測試結(jié)果是0.54%,如上圖所示,不過也算是接近0.4%]

現(xiàn)在我刪除filter表,運(yùn)行收縮數(shù)據(jù)文件命令后,重新分析聚集索引的碎片化。

-- Drop the filler table, creating 10MB of free space at the 'front' of the data file
DROP TABLE [FillerTable];
GO
 
-- Shrink the database
DBCC SHRINKDATABASE([DBMaint2008]);
GO
 
-- Check the index fragmentation again
SELECT
  [avg_fragmentation_in_percent]
FROM sys.dm_db_index_physical_stats(
  DB_ID(N'DBMaint2008'), OBJECT_ID(N'ProdTable'), 1, NULL, 'LIMITED');
GO

下面是我的執(zhí)行結(jié)果,作者執(zhí)行結(jié)果,請看原文:

image

原文:

Wow! After the shrink, the logical fragmentation is almost 100%. The shrink operation *completely* fragmented the index, removing any chance of efficient range scans on it by ensuring the all range-scan readahead I/Os will be single-page I/Os.

譯文:

哇,真是恐怖!數(shù)據(jù)文件收縮后,索引的邏輯碎片幾乎接近100%,收縮數(shù)據(jù)文件導(dǎo)致了索引的完全碎片化。消除了任何關(guān)于它的有效范圍掃描的機(jī)會,確保所有執(zhí)行提前讀范圍掃描的 I/O 在單頁的 I/O操作
為什么會這樣呢? 當(dāng)單個數(shù)據(jù)文件收縮操作一次后,它會用GAM位圖索引找出數(shù)據(jù)文件中分配最高的頁,然后盡可能的向前移動到文件能夠移動的地方,就這樣子,在上面的例子中,它完全反轉(zhuǎn)了聚集索引,讓它從非碎片化到完全碎片化。
同樣的代碼用于DBCC SHRINKFILE, DBCC SHRINKDATABASE,以及自動收縮,他們同樣糟糕,就像索引的碎片化,數(shù)據(jù)文件的收縮同樣產(chǎn)生了大量的I/O操作,耗費(fèi)大量的CPU資源,并且生成了*load*事務(wù)日志,因為任何操作都會全部記錄下來。
數(shù)據(jù)文件收縮決不能作為定期維護(hù)的一部分,你決不能啟用“自動收縮”屬性,我嘗試把它從SQL 2005和SQL 2008產(chǎn)品中移除,它還存在的唯一原因是為了更好的向前兼容,不要掉入這樣的陷阱:創(chuàng)建一個維護(hù)計劃,重新生成所有索引,然后嘗試回收重建索引耗費(fèi)的空間采取收縮數(shù)據(jù)文件 — — 這就是你做的生成了大量事務(wù)日志,但實質(zhì)沒有提高性能的零和游戲。
所以,你為什么要運(yùn)行一個收縮呢,?舉例來說,如果你把一個相當(dāng)大的數(shù)據(jù)庫刪除了相當(dāng)大的比例,該數(shù)據(jù)庫不太可能增長,或者你需要轉(zhuǎn)移一個數(shù)據(jù)庫文件前先清空數(shù)據(jù)文件?

譯文:

我很想推薦的方法如下:

創(chuàng)建一個新的文件組
將所有受影響的表和索引移動到一個新的文件組用CREATE INDEX ... WITH (DROP_EXISTING=ON)的腳本,在移動表的同時,刪除表中的碎片。
刪掉那些你準(zhǔn)備收縮的舊文件組,你反正要收縮(或縮小它的方式下來,如果它的主文件組)。
基本上你需要提供一些更多的空間,才可以收縮的舊文件,但它是一個更清晰的設(shè)置。

原文:

The method I like to recommend is as follows:

Create a new filegroup
Move all affected tables and indexes into the new filegroup using the CREATE INDEX … WITH (DROP_EXISTING = ON) ON syntax, to move the tables and remove fragmentation from them at the same time
Drop the old filegroup that you were going to shrink anyway (or shrink it way down if its the primary filegroup)
Basically you need to provision some more space before you can shrink the old files, but it's a much cleaner mechanism.

如果你完全沒有選擇需要收縮日志文件,請注意這個操作會導(dǎo)致索引的碎片化,你應(yīng)該在收縮數(shù)據(jù)文件采取一些步驟消除它可能導(dǎo)致的性能問題,唯一的方式是用DBCC INDEXDEFPAGE或 ALTER INDEX ...REORGANIZE消除索引的碎片不要引起數(shù)據(jù)文件的增長,這些命令要求擴(kuò)展空間8KB的頁代替重建一個新的索引在索引重建操作中。
底線 — — 盡量避免不惜一切代價運(yùn)行數(shù)據(jù)文件收縮

所以,還在用作業(yè)定期收縮數(shù)據(jù)文件或數(shù)據(jù)庫開啟了“自動收縮”屬性的朋友們,請及時糾正你們的錯誤認(rèn)識吧!

支持原著,也希望大家支持我辛苦的翻譯勞動,請加上鏈接瀟湘隱者博客。

相關(guān)文章

  • 關(guān)于面試中常問的數(shù)據(jù)庫回表問題

    關(guān)于面試中常問的數(shù)據(jù)庫回表問題

    這篇文章主要介紹了關(guān)于面試中常問的數(shù)據(jù)庫回表問題,回表就是先通過數(shù)據(jù)庫索引掃描出數(shù)據(jù)所在的行,再通過行主鍵id取出索引中未提供的數(shù)據(jù),即基于非主鍵索引的查詢需要多掃描一棵索引樹,需要的朋友可以參考下
    2023-07-07
  • 數(shù)據(jù)庫分頁查詢語句數(shù)據(jù)庫查詢

    數(shù)據(jù)庫分頁查詢語句數(shù)據(jù)庫查詢

    關(guān)于分頁 SQL 的資料許多,有的使用存儲過程,有的使用游標(biāo)。本人不喜歡使用游標(biāo),我覺得它耗資、效率低;使用存儲過程是個不錯的選擇,因為存儲過程是顛末預(yù)編譯的,執(zhí)行效率高,也更靈活
    2014-08-08
  • navicat導(dǎo)入excel文件的步驟以及可能碰到的問題

    navicat導(dǎo)入excel文件的步驟以及可能碰到的問題

    本文介紹將excel導(dǎo)入到mysql數(shù)據(jù)庫的方法,相對來說比較簡單,但也可能會碰到一些小問題,在這里做一個小的總結(jié),這里使用到的工具包括navicat,mysql數(shù)據(jù)庫以及excel,需要的朋友可以參考下
    2024-07-07
  • dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫圖文教程(sql文件形式)

    dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫圖文教程(sql文件形式)

    這篇文章主要介紹了如何使用DBeaver復(fù)制數(shù)據(jù)庫,在導(dǎo)出和導(dǎo)入數(shù)據(jù)庫時,需要注意編碼一致性,以避免導(dǎo)入錯誤,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 使用navicat導(dǎo)入sql文件的方法步驟

    使用navicat導(dǎo)入sql文件的方法步驟

    這篇文章主要介紹了使用navicat導(dǎo)入sql文件的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一個多表查詢的SQL語句

    一個多表查詢的SQL語句

    一個多表查詢的SQL語句...
    2007-06-06
  • MSSQL轉(zhuǎn)MYSQL的一些記錄

    MSSQL轉(zhuǎn)MYSQL的一些記錄

    今天把一個MSSQL的數(shù)據(jù)庫轉(zhuǎn)成MYSQL,在沒有轉(zhuǎn)換工具的情況下,對于字段不多的數(shù)據(jù)表我用了如下手功轉(zhuǎn)換的方法,還算方便。MSSQL使用企業(yè)管理器操作,MYSQL用phpmyadmin操作。
    2010-02-02
  • SQL注入原理與解決方法代碼示例

    SQL注入原理與解決方法代碼示例

    這篇文章主要介紹了SQL注入原理與解決方法代碼示例,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • 如何解決VisualSVN Server 安裝提示錯誤 Repositories is not a valid short file name

    如何解決VisualSVN Server 安裝提示錯誤 Repositories is not a valid shor

    最近在程序中安裝VisualSVN Server時,總是提示“'Repositories' is not a valid short file name”這個問題,難為了好長時間,最終解決,下面小編把我的解決辦法分享給大家,供大家參考
    2015-09-09
  • 執(zhí)行Insert Exec時的隱藏開銷 分析

    執(zhí)行Insert Exec時的隱藏開銷 分析

    Insert Exec時的隱藏開銷,大家可以參考下。
    2009-07-07

最新評論

云霄县| 佛冈县| 抚州市| 玉门市| 图木舒克市| 红河县| 时尚| 萨嘎县| 镇远县| 峨眉山市| 石楼县| 渭源县| 大渡口区| 双峰县| 河池市| 杨浦区| 甘泉县| 佳木斯市| 象州县| 交口县| 汉川市| 大城县| 合阳县| 邵武市| 阿坝县| 麦盖提县| 宁德市| 西和县| 邢台县| 太湖县| 苍梧县| 高雄市| 静海县| 营口市| 长春市| 闵行区| 句容市| 颍上县| 泰顺县| 长沙县| 阳朔县|