sqlserver收縮,sqlserver收縮日志文件影響業(yè)務(wù)嗎

sqlserver如何壓縮數(shù)據(jù)文件空間?

在程序組中,展開“Sqlserver”運行“查詢分析器”。輸入用戶名、密碼。

我們提供的服務(wù)有:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、果洛州ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的果洛州網(wǎng)站制作公司

在工具欄的數(shù)據(jù)庫列表中選擇要操作的數(shù)據(jù)庫。

輸入:select * from sysfiles 執(zhí)行,可以看到下面的內(nèi)容,記住其中的fileid字段的內(nèi)容,也就是1或2,標(biāo)識數(shù)據(jù)庫的數(shù)據(jù)文件或日志文件,下面的命令要用到這里的值。

輸入:dbcc?shrinkdatabase('?庫名'?),收縮數(shù)據(jù)庫,結(jié)果如下:可以看到壓縮后的數(shù)據(jù)庫文件的尺寸。

輸入:dbcc?shrinkfile(2,?0)執(zhí)行,然后輸入dbcc?shrinkfile(1,?0)執(zhí)行。兩句命令中的第一個參數(shù)就是前面看到的FileID的值,表示了一個是日志文件,一個是數(shù)據(jù)文件。第二個參數(shù)0,表示收縮到初始大小。

輸入:dbcc updateusage (0),執(zhí)行更新操作,完工!更新后可以跟之前的數(shù)據(jù)文件比對一下了,會有相對較大的尺寸上的優(yōu)化了。

SQL SERVER如何收縮數(shù)據(jù)庫

工具/材料

SQLSERVER2008

首先打開SQL SERVER的管理工具,找到要操作的數(shù)據(jù)庫,如下圖所示,右鍵單擊選擇屬性

然后在彈出的數(shù)據(jù)庫屬性信息界面中來查看一下可用空間,一般都是根據(jù)可用空間的大小來判斷是否需要對數(shù)據(jù)庫進(jìn)行收縮的,如下圖所示

然后我們在數(shù)據(jù)庫屬性頁中選擇”選項”頁面,如下圖所示,這個頁面包括了自動收縮的選項設(shè)置

在選項頁面的右側(cè)找到自動欄信息,如下圖所示,將自動收縮選項設(shè)置為TRUE。一旦將自動收縮設(shè)置為TRUE,數(shù)據(jù)庫就會自動監(jiān)控可用空間的大小進(jìn)行數(shù)據(jù)收縮。

另外還可以在數(shù)據(jù)庫中進(jìn)行手動收縮設(shè)置,如下圖所示,先選擇數(shù)據(jù)庫選項的收縮

在彈出的數(shù)據(jù)庫收縮界面中,我們將收縮比進(jìn)行設(shè)置,大家根據(jù)自己的實際需要設(shè)置即可

另外你也可以選擇收縮數(shù)據(jù)庫文件的選項,如下圖所示,可以選擇相應(yīng)的收縮類型,我這里選擇的是釋放未使用空間的選項,大家根據(jù)自己情況進(jìn)行選擇

SQLServer數(shù)據(jù)庫收縮相關(guān)知識

SQL Server 數(shù)據(jù)庫采取預(yù)先分配空間的方法來建立數(shù)據(jù)庫的數(shù)據(jù)文件或者日志文件,比如數(shù)據(jù)文件的空間分配了300MB,而實際上只占用了20MB空間,這樣就會造成磁盤存儲空間的浪費??梢酝ㄟ^數(shù)據(jù)庫收縮技術(shù)對數(shù)據(jù)庫中的每個文件進(jìn)行收縮,刪除已經(jīng)分配但沒有使用的頁。從而節(jié)省服務(wù)器的存儲的成本。

官方解釋:收縮數(shù)據(jù)文件通過將數(shù)據(jù)頁從文件末尾移動到更靠近文件開頭的未占用的空間來恢復(fù)空間。在文件末尾創(chuàng)建足夠的可用空間后,可以取消對文件末尾的數(shù)據(jù)頁的分配并將它們返回給文件系統(tǒng)。

收縮后的數(shù)據(jù)庫不能小于數(shù)據(jù)庫最初創(chuàng)建時指定的大小。 或是上一次使用文件大小更改操作(如 DBCC SHRINKFILE)設(shè)置的顯式大小。

比如:如果數(shù)據(jù)庫最初創(chuàng)建時的大小為 10 MB,后來增長到 100 MB,則該數(shù)據(jù)庫最小只能收縮到 10 MB,即使已經(jīng)刪除數(shù)據(jù)庫的所有數(shù)據(jù)也是如此。

不能在備份數(shù)據(jù)庫時收縮數(shù)據(jù)庫。 反之,也不能在數(shù)據(jù)庫執(zhí)行收縮操作時備份數(shù)據(jù)庫。

介紹:收縮指定數(shù)據(jù)庫中的數(shù)據(jù)文件大小。

語法格式:

參數(shù)說明:

介紹:收縮當(dāng)前數(shù)據(jù)庫的指定數(shù)據(jù)或日志文件的大小,或通過將數(shù)據(jù)從指定的文件移動到相同文件組中的其他文件來清空文件,以允許從數(shù)據(jù)庫中刪除該文件。文件大小可以收縮到比創(chuàng)建該文件時所指定的大小更小。這樣會將最小文件大小重置為新值。

語法格式:

參數(shù)說明:

例如,如果創(chuàng)建一個10MB 的文件,然后在文件仍然為空的時候?qū)⑽募湛s為2 MB,默認(rèn)文件大小將設(shè)置為2 MB。這只適用于永遠(yuǎn)不會包含數(shù)據(jù)的空文件。

另附SqlServer常見問題解答

1)管理器不會主動刷新,需要手工刷新一下才能看到最新狀態(tài)(性能方面的考慮)

2)很少情況下,恢復(fù)進(jìn)程被掛起了。這個時候假設(shè)你要恢復(fù)并且回到可訪問狀態(tài),要執(zhí)行:

RESTORE database dbname with recovery

這使得恢復(fù)過程能完全結(jié)束。

3)如果你要不斷恢復(fù)后面的日志文件,的確需要使數(shù)據(jù)庫處于“正在還原狀態(tài)”,

這通常是執(zhí)行下面命令:

RESTORE database dbname with norecovery

原來SQL Server對服務(wù)器內(nèi)存的使用策略是用多少內(nèi)存就占用多少內(nèi)存,只用在服務(wù)器內(nèi)存不足時,才會釋放一點占用的內(nèi)存,所以SQL Server 服務(wù)器內(nèi)存往往會占用很高。我們可以通過DBCC MemoryStatus來查看內(nèi)存狀態(tài)。

SQL SERVER運行時會執(zhí)行兩種緩存:

1. 數(shù)據(jù)緩存:執(zhí)行個查詢語句,SQL SERVER會將相關(guān)的數(shù)據(jù)頁(SQL SERVER操作的數(shù)據(jù)都是以頁為單位的)加載到內(nèi)存中來, 下一次如果再次請求此頁的數(shù)據(jù)的時候,就無需讀取磁盤了,大大提高了速度。

2.執(zhí)行命令緩存:在執(zhí)行存儲過程,自定函數(shù)時,SQL SERVER需要先二進(jìn)制編譯再運行,編譯后的結(jié)果也會緩存起來, 再次調(diào)用時就無需再次編譯。

可以調(diào)用以下幾個DBCC管理命令來清理這些緩存:

但是,這幾個命令雖然會清除掉現(xiàn)有緩存,為新的緩存騰地方,但是Sql server并不會因此釋放掉已經(jīng)占用的內(nèi)存。SQL SERVER并沒有提供任何命令允許我們釋放不用到的內(nèi)存。因此我們只能通過動態(tài)調(diào)整SQL SERVER可用的物理內(nèi)存設(shè)置來強(qiáng)迫它釋放內(nèi)存。

解決SQLSERVER內(nèi)存占用過高的方法:

1、清除所有緩存DBCC DROPLEANBUFFERS

2、調(diào)整SQLSERVER可使用的最大服務(wù)器內(nèi)存。

在SQL管理器,右擊實例名稱

在屬性實例屬性里面找到內(nèi)存選項

把最大內(nèi)存改成合適的內(nèi)存,確定后內(nèi)存就會被強(qiáng)制釋放,然后重啟實例。再看看任務(wù)管理器,內(nèi)存使用率就降下來啦。

1、查看連接對象

USE master

GO

--如果要指定數(shù)據(jù)庫就把注釋去掉

SELECT * FROM sys.[sysprocesses] WHERE [spid]50 --AND DB_NAME([dbid])='gposdb'

當(dāng)前連接對象有67個其中‘WINAME’的主機(jī)名,‘jTDS’的進(jìn)程名不屬于已知常用軟件,找到這臺主機(jī)并解決連接問題。在360流量防火墻中查看有哪個軟件連接了服務(wù)器IP,除之。

2、然后使用下面語句看一下各項指標(biāo)是否正常,是否有阻塞,正常情況下搜索結(jié)果應(yīng)該為空。

SELECT TOP 10

[session_id],

[request_id],

[start_time] AS '開始時間',

[status] AS '狀態(tài)',

[command] AS '命令',

dest.[text] AS 'sql語句',

DB_NAME([database_id]) AS '數(shù)據(jù)庫名',

[blocking_session_id] AS '正在阻塞其他會話的會話ID',

[wait_type] AS '等待資源類型',

[wait_time] AS '等待時間',

[wait_resource] AS '等待的資源',

[reads] AS '物理讀次數(shù)',

[writes] AS '寫次數(shù)',

[logical_reads] AS '邏輯讀次數(shù)',

[row_count] AS '返回結(jié)果行數(shù)'

FROM sys.[dm_exec_requests] AS der

CROSS APPLY

sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

WHERE [session_id]50 AND DB_NAME(der.[database_id])='gposdb'

ORDER BY [cpu_time] DESC

查看是哪些SQL語句占用較大可以使用下面代碼

--在SSMS里選擇以文本格式顯示結(jié)果

SELECT TOP 10

dest.[text] AS 'sql語句'

FROM sys.[dm_exec_requests] AS der

CROSS APPLY

sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

WHERE [session_id]50

ORDER BY [cpu_time] DESC

3、如果SQLSERVER存在要等待的資源,那么執(zhí)行下面語句就會顯示出會話中有多少個worker在等待

SELECT TOP 10

[session_id],

[request_id],

[start_time] AS '開始時間',

[status] AS '狀態(tài)',

[command] AS '命令',

dest.[text] AS 'sql語句',

DB_NAME([database_id]) AS '數(shù)據(jù)庫名',

[blocking_session_id] AS '正在阻塞其他會話的會話ID',

der.[wait_type] AS '等待資源類型',

[wait_time] AS '等待時間',

[wait_resource] AS '等待的資源',

[dows].[waiting_tasks_count] AS '當(dāng)前正在進(jìn)行等待的任務(wù)數(shù)',

[reads] AS '物理讀次數(shù)',

[writes] AS '寫次數(shù)',

[logical_reads] AS '邏輯讀次數(shù)',

[row_count] AS '返回結(jié)果行數(shù)'

FROM sys.[dm_exec_requests] AS der

INNER JOIN [sys].[dm_os_wait_stats] AS dows

ON der.[wait_type]=[dows].[wait_type]

CROSS APPLY

sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

WHERE [session_id]50

ORDER BY [cpu_time] DESC;

4、查詢CPU占用最高的SQL語句

SELECT TOP 10

total_worker_time/execution_count AS avg_cpu_cost, plan_handle,

execution_count,

(SELECT SUBSTRING(text, statement_start_offset/2 + 1,

(CASE WHEN statement_end_offset = -1

THEN LEN(CONVERT(nvarchar(max), text)) * 2

ELSE statement_end_offset

END - statement_start_offset)/2)

FROM sys.dm_exec_sql_text(sql_handle)) AS query_text

FROM sys.dm_exec_query_stats

ORDER BY [avg_cpu_cost] DESC;

5、索引缺失查詢

SELECT

DatabaseName = DB_NAME(database_id)

,[Number Indexes Missing] = count(*)

FROM sys.dm_db_missing_index_details

GROUP BY DB_NAME(database_id)

ORDER BY 2 DESC;

SELECT TOP 10

[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)

, avg_user_impact

, TableName = statement

, [EqualityUsage] = equality_columns

, [InequalityUsage] = inequality_columns

, [Include Cloumns] = included_columns

FROM sys.dm_db_missing_index_groups g

INNER JOIN sys.dm_db_missing_index_group_stats s

ON s.group_handle = g.index_group_handle

INNER JOIN sys.dm_db_missing_index_details d

ON d.index_handle = g.index_handle

ORDER BY [Total Cost] DESC;

找到索引缺失的表,根據(jù)查詢結(jié)果中的關(guān)鍵次逐一建立索引。

如何收縮sqlserver數(shù)據(jù)庫

你用數(shù)據(jù)庫管理器選中數(shù)據(jù)庫,先分離,然后再附加,然后再點收縮,收縮的時候先收縮日志文件,一般能收縮很多,記得要填寫數(shù)字啊,比如上面提示能收縮為0,你就填個5兆,這樣預(yù)留一點空間,而且很快,收縮完日志文件之后再收縮數(shù)據(jù)庫 同理比最小能收縮量大幾兆就可以了,但是收縮數(shù)據(jù)庫比較慢 需要很多時間

網(wǎng)站題目:sqlserver收縮,sqlserver收縮日志文件影響業(yè)務(wù)嗎
標(biāo)題鏈接:http://muchs.cn/article2/phgiic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站排名品牌網(wǎng)站制作、Google、建站公司靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化