當前位置:首頁 » 操作系統 » 資料庫碎片

資料庫碎片

發布時間: 2022-08-01 08:41:37

❶ Access中,頻繁刪除資料庫對象,資料庫文件中的碎片不斷增加,資料庫文件也會越來越大,怎樣解決最有效

兩個辦法
一,在
工具-選項-常規
,有個關閉時
壓縮資料庫
,打上勾,可以在關閉時清掉這些碎片。
二,在
工具-資料庫實用工具-修復和壓縮資料庫,這個可以清掉這些碎片。

❷ 逐步講解 Oracle資料庫碎片如何整理

對於系統管理員來講,如何保證網路穩定運行,如何提高資料庫性能,使其更加安全高效,就顯得尤為重要。作為影響資料庫性能的一大因素 -- 資料庫碎片,應當引起 DBA 的足夠重視,及時發現並整理碎片乃是 DBA 一項基本維護內容。 1、碎片是如何產生的 當生成一個資料庫時,它會分成稱為表空間( Tablespace )的多個邏輯段( Segment ),如系統(System)表空間 , 臨時(Temporary)表空間等。一個表空間可以包含多個數據范圍(Extent)和一個或多個自由范圍塊,即自由空間(Free Space)。 表空間、段、范圍、自由空間的邏輯關系如下: 當表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始范圍分配空間。在這些初始范圍充滿數據時,段會請求增加另一個范圍。這樣的擴展過程會一直繼續下去,直到達到最大的范圍值,或者在表空間中已經沒有自由空間用於下一個范圍。最理想的狀態就是一個段的數據可被存在單一的一個范圍中。這樣,所有的數據存儲時靠近段內其它數據,並且尋找數據可少用一些指針。但是一個段包含多個范圍的情況是大量存在的,沒有任何措施可以保證這些范圍是相鄰存儲的,當要滿足一個空間要求時,資料庫不再合並相鄰的自由范圍(除非別無選擇), 而是尋找表空間中最大的自由范圍來使用。這樣將逐漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。例如: 2、碎片對系統的影響 隨著時間推移,基於資料庫的應用系統的廣泛使用,產生的碎片會越來越多,將對資料庫有以下兩點主要影響: 1)導致系統性能減弱。 如上所述,當要滿足一個空間要求時,資料庫將首先查找當前最大的自由范圍,而 「最大」自由范圍逐漸變小,要找到一個足夠大的自由范圍已變得越來越困難,從而導致表空間中的速度障礙,使資料庫的空間分配愈發遠離理想狀態; 2)浪費大量的表空間。 盡管有一部分自由范圍(如表空間的 pctincrease 為非 0 )將會被 SMON (系統監控)後台進程周期性地合並,但始終有一部分自由范圍無法得以自動合並,浪費了大量的表空間。 3、自由范圍的碎片計算 由於自由空間碎片是由幾部分組成,如范圍數量、最大范圍尺寸等,我們可用 FSFI--Free Space Fragmentation Index (自由空間碎片索引)值來直觀體現: FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents))) 可以看出, FSFI 的最大可能值為 100 (一個理想的單文件表空間)。隨著范圍的增加, FSFI 值緩慢下降,而隨著最大范圍尺寸的減少, FSFI 值會迅速下降。 下面的腳本可以用來計算 FSFI 值: rem FSFI Value Compute rem fsfi.sql column FSFI format 999,99 select tablespace_name,sqrt(max(blocks)/sum(blocks))* (100/sqrt(sqrt(count(blocks)))) FSFI from dba_free_space group by tablespace_name order by 1; spool fsfi.rep; / spool off;比如,在某資料庫運行腳本 fsfi.sql, 得到以下 FSFI 值: TABLESPACE_NAME FSFI ------------------------------------- RBS 74.06 SYSTEM 100.00 TEMP 22.82 TOOLS 75.79 USERS 100.00 USER_TOOLS 100.00 YDCX_DATA 47.34 YDCX_IDX 57.19 YDJF_DATA 33.80 YDJF_IDX 75.55統計出了資料庫的 FSFI 值,就可以把它作為一個可比參數。在一個有著足夠有效自由空間,且FSFI 值超過 30 的表空間中,很少會遇見有效自由空間的問題。當一個空間將要接近可比參數時,就需要做碎片整理了。 4、自由范圍的碎片整理1)表空間的 pctincrease 值為非 0。 可以將表空間的預設存儲參數 pctincrease 改為非 0 。一般將其設為 1 ,如: alter tablespace temp default storage(pctincrease 1);這樣SMON 便會將自由范圍自動合並。也可以手工合並自由范圍: alter tablespace temp coalesce。 5、段的碎片整理我們知道,段由范圍組成。在有些情況下,有必要對段的碎片進行整理。要查看段的有關信息,可查看數據字典 dba_segments ,范圍的信息可查看數據字典 dba_extents 。如果段的碎片過多, 將其數據壓縮到一個范圍的最簡單方法便是用正確的存儲參數將這個段重建,然後將舊表中的數據插入到新表,同時刪除舊表。這個過程可以用 Import/Export (輸入 / 輸出)工具來完成。 Export ()命令有一個(壓縮)標志,這個標志在讀表時會引發 Export 確定該表所分配的物理空間量,它會向輸出轉儲文件寫入一個新的初始化存儲參數 -- 等於全部所分配空間。若這個表關閉, 則使用 Import ()工具重新生成。這樣,它的數據會放入一個新的、較大的初始段中。例如: exp user/password file=exp.dmp compress=Y grants=Y indexes=Y tables=(table1,table2);若輸出成功,則從庫中刪除已輸出的表,然後從輸出轉儲文件中輸入表: imp user/password file=exp.dmp commit=Y buffer=64000 full=Y 這種方法可用於整個資料庫。 以上簡單分析了 Oracle 資料庫碎片的產生、計算方法及整理,僅供參考。資料庫的性能優化是一項技術含量高,同時又需要有足夠耐心、認真細致的工作。 對資料庫碎片的一點探討, 下面是一種如何自動處理表空間碎片的代碼,希望對上大家看上文有用 Coalesce Tablespace Automatically This technique comes from Sandeep Naik, a database administrator for GSXXI, Inc. in New York City, New York Here is a handy script which can be scheled to automatically run and coalesces the tablespaces. This script is designed to run in NT but can be run in any operating system by slight modifications in the path where the file spools from the SQLPLUS environment. It assumes that the user who runs the script has priviledges to view the data dictionary. Start of code -------------------------------------- sqlplus / prompt this script will coalesce the tablespace automatically set verify off; set termout off; set head off; spool c: empcoalesce.log select alter tablespace ||TABLESPACE_NAME|| coalesce ; from DBA_FREE_SPACE_COALESCED where PERCENT_EXTENTS_COALESCED

❸ 什麼是內部碎片什麼是外部碎片各種存儲管理中都可能產生何種碎片

1.內部碎片:

當一個進程裝入到固定大小的分區塊(比如頁)時,假如進程所需空間小於分區塊,則分區塊的剩餘的空間將無法被系統使用,稱為內部碎片。

2.外部碎片:

指的是還沒有被分配出去(不屬於任何進程),但由於太小了無法分配給申請內存空間的新進程的內存空閑區域。

3.存儲管理中都可能產生的碎片:

除了內部碎片和外部碎片,在「分頁存儲」中,可能產生「頁內碎片」,頁內碎片是由於進程的最後一頁經常裝不滿一塊而形成了不可利用的碎片。

(3)資料庫碎片擴展閱讀

在數據存儲領域中,碎片(fragmentation)是指存儲空間使用效率低下,結果導致功能、運行效率變低或二者兼而有之的現象。碎片化所造成的影響取決於具體的存儲系統以及碎片化的種類。

大部分情況下,碎片化都會導致都會導致存儲空間的浪費,此時「碎片」一詞亦可指代閑置的空間本身。對於其他的一些系統來說(比如FAT文件系統),數據量一定的前提下,用於存儲數據所佔的存儲空間是一定的,和碎片化的程度無關。

❹ 什麼 是 資料庫碎片

這裡面有相關的解釋希望能對你有所幫助
http://wenku..com/view/fe1f070203d8ce2f00662393.html

❺ arcgis中資料庫碎片化整理會少數據么

不會的。因為這只會重新調整地理資料庫在磁碟中的存儲方式。

【拓展】資料庫碎片整理:對個人地理資料庫或文件地理資料庫進行碎片整理。資料庫碎片整理操作會重新調整地理資料庫在磁碟中的存儲方式,因而通常會減小地理資料庫的大小並提高性能。

用法:

  • 當個人地理資料庫大於 250 MB 時,建議對資料庫進行碎片整理。

  • 如果頻繁對某個資料庫執行數據輸入、刪除或常規編輯,則應對該資料庫進行定期碎片整理以確保最佳性能。

  • 如果在 ArcMap 中打開了某個資料庫以供編輯,則無法對其進行碎片整理。要對資料庫進行碎片整理,可從「內容列表」中移除引用了該資料庫中包含的表或要素類的所有圖層。

  • 開始行動:個人和文件地理資料庫以二進制文件形式存儲在磁碟驅動器中。添加、移除或編輯數據時,這些文件會產生碎片,降低資料庫的整體性能。資料庫碎片整理工具通過對這些二進制文件進行碎片整理,可重新整理資料庫在磁碟中的存儲方式,從而減少磁碟中資料庫的大小並改善資料庫性能。

php怎麼顯示mysql資料庫的碎片

MySQL 8.0.16 已經發布,它像往常一樣增強了組復制 Group Replication 功能。

這篇文章介紹了 MySQL 8.0.16 為 Group Replication 帶來的新功能:

Message fragmentation(信息碎片化)。


背景

Group Replication 目前使用 XCom(一種組通信引擎),特點:原子性,組員狀態檢測等。每個成員的組復制插件先將信息轉發到本地 XCom,再由 XCom 最終以相同的順序將信息傳遞給每個組成員的 Group Replication 插件。

XCom 由單線程實現。當一些成員廣播信息過大時,XCom 線程必須花費更多的時間來處理那個大信息。如果成員的 XCom 線程忙於處理大信息的時間過長,它可能會去查看其他成員的 XCom 實例。例如,忙碌的成員失效。如果是這樣,該組可以從該組中驅逐忙碌的成員。

MySQL 8.0.13 新增group_replication_member_expel_timeout系統變數,您可以通過它來調整將成員從組中驅逐的時間。例如,懷疑成員失敗,但成員實際上忙於處理大信息,給成員足夠的時間來完成處理。在這種情況下,是否為成員增加驅逐超時的設置是一種權衡。有可能等了很久,該成員實際真的失效了。


Message fragmentation(信息碎片化)

MySQL 8.0.16 的 Group Replication 插件新增用來處理大信息的功能:信息碎片化。

簡而言之,您可以為成員的廣播信息指定最大值。超過最大值的信息將分段為較小的塊傳播。

您可以使用 group_replication_communication_max_message_size系統變數指定允許的信息最大值(默認值為10 MiB)。


示例

讓我們用一個例子來解釋新功能。圖1顯示了當綠色成員向組廣播信息時,新功能是如何處理的。

圖1 對傳出信息進行分段

1. 如果信息大小超過用戶允許的最大值(group_replication_communication_max_message_size),則該成員會將信息分段為不超過最大值的塊。

2. 該成員將每個塊廣播到該組,即將每個塊單獨轉發到XCom。

XCom 最終將這些塊提供給組成員。下面三張圖展示出了中間綠色成員發送大信息時工作的新特徵。

圖2a 重新組合傳入的信息:第一個片段

3. 成員得出結論,傳入的信息實際上是一個更大信息的片段。

4. 成員緩沖傳入的片段,因為他們認為片段是仍然不完整的信息的一部分。(片段包含必要的元數據以達到這個結論。)

圖2b 重新組合傳入的信息:第二個片段

5. 見上面的第3步。

6. 見上面的第4步。

圖2c 重新組合傳入的信息:最後一個片段

7. 成員得出結論,傳入的信息實際上是一個更大信息的片段。

8. 成員得出結論,傳入的片段是最後一個缺失的塊,重新組合原始信息,然後對其進行處理,傳輸完畢。


結論

MySQL 8.0.16 已經發布後,組復制現在可以確保組內交換的信息大小不超過用戶定義的閾值。這可以防止組內誤判而驅逐成員。

❼ 清理資料庫碎片SQL語句

清除資料庫日誌語句
--清除sqlserver 2000/2005 資料庫日誌
替換下紅字部分資料庫名稱

declare @databasename varchar(15)
select @databasename='hdjjgl_journal'
DUMP TRANSACTION @databasename WITH NO_LOG

BACKUP LOG @databasename WITH NO_LOG

DBCC SHRINKDATABASE(@databasename)

或者
USE 資料庫名
DUMP TRANSACTION 資料庫名 WITH NO_LOG
BACKUP LOG 資料庫名 WITH NO_LOG
DBCC SHRINKFILE(2)

**********************************
--清除sqlserver 2008 資料庫日誌 ,執行兩遍
替換下紅字部分資料庫名稱,建立datalogbak清楚的日誌備份文件夾,注意路徑自定義。

use gdzjg_journal
declare @databasename varchar(100)
declare @databasenamelog varchar(100)
declare @databasenamedir varchar(100)
select @databasename='gdzjg_journal'
select @databasenamelog=@databasename+'_log'
select @databasenamedir='g:\datalogbak\'+@databasename

BACKUP LOG @databasename to disk=@databasenamedir
DBCC SHRINKFILE (@databasenamelog,1)

或者

ALTER DATABASE 資料庫名稱SET RECOVERY SIMPLE
ALTER DATABASE 資料庫名稱SET RECOVERY FULL
DBCC SHRINKDATABASE(資料庫名稱,0)

sqlserver 2000、2008會保存所有的資料庫操作過程,將指令保存在ldf文件中,如果誤刪除數據,想恢復數據的話,可以通過Lumigent Log Explorer For SQLServer 軟體分析ldf文件,可以看到所有執行過的insert、update、delete數據,導出來再逆向執行即可,本人曾經用過一回,確實奏效。

1、sql server 2000清理資料庫日誌

USE 資料庫名

DUMP TRANSACTION 資料庫名 WITH NO_LOG
BACKUP LOG 資料庫名 WITH NO_LOG
DBCC SHRINKFILE(2)

SHRINKFILE(2),後面的2是file_id,可以在當前資料庫用select * from sysfiles看得到,看資料庫的log文件的fileid是多少,正常情況下log的ldf文件是2,mdf文件的fileid是1。
這個查詢語句可以隨時執行,不影響資料庫的運行。

sql server 2005、2008清理資料庫日誌

USE 資料庫名
ALTER DATABASE 資料庫名 SET RECOVERY SIMPLE
ALTER DATABASE 資料庫名 SET RECOVERY FULL
DBCC SHRINKDATABASE(資料庫名,0)

這個查詢語句可以隨時執行,不影響資料庫的運行。

清理ldf的操作可以使用sql server代理,每天自動執行一次,就不怕文件增長撐爆硬碟了。

2、一般mdf用不著收縮,收縮多了容易產生文件碎片,因為delete數據之後,mdf文件中可用頁面空間會保留在那裡,等下次有新數據進來時,會繼續使用。如果實在要清理,可以參考下面的語句:

sql server 2000、2005、2008 收縮mdf文件

DBCC SHRINKDATABASE(資料庫名)
DBCC SHRINKFILE(1,0)
DBCC UPDATEUSAGE(0)

執行上述操作後,你會發現mdf的文件減少了,ldf的文件增大了,再用上面1的日誌清理操作一次即可。

3、最後再附送一個查看數據表的行數、佔用文件空間、存儲情況的查詢語句

-- drop table #test
create table #test(
name varchar(50),
rows int,
reserved varchar(20),
data varchar(20),
index_size varchar(20),
unused varchar(20)
)
set nocount on
insert into #test
EXEC sp_MSforeachtable @command1="sp_spaceused '?'"
select * from #test order by cast(replace(reserved,'KB','') as int) desc

❽ 資料庫碎片整理不影響業務使用

您好,您是想問資料庫碎片整理不影響業務使用嗎?資料庫碎片整理不影響業務使用的,因為資料庫在碎片整理時,為了防止影響使用是系統在後台進行運行整理的。資料庫碎片整理時將資料庫中不用的瑣碎信息進行整理和分類。

❾ mysql 如何去整理表數據,碎片整理

MySQL 的碎片是 MySQL 運維過程中比較常見的問題,碎片的存在十分影響資料庫的性能,本文將對 MySQL 碎片進行一次講解。


判斷方法:

MySQL 的碎片是否產生,通過查看

show table status from table_nameG;

這個命令中 Data_free 欄位,如果該欄位不為 0,則產生了數據碎片。


產生的原因:

1. 經常進行 delete 操作

經常進行 delete 操作,產生空白空間,如果進行新的插入操作,MySQL將嘗試利用這些留空的區域,但仍然無法將其徹底佔用,久而久之就產生了碎片;


演示:

創建一張表,往裡面插入數據,進行一個帶有 where 條件或者 limit 的 delete 操作,刪除前後對比一下 Data_free 的變化。

刪除前:

Data_free 不為 0,說明有碎片;


2. update 更新

update 更新可變長度的欄位(例如 varchar 類型),將長的字元串更新成短的。之前存儲的內容長,後來存儲是短的,即使後來插入新數據,那麼有一些空白區域還是沒能有效利用的。

演示:

創建一張表,往裡面插入一條數據,進行一個 update 操作,前後對比一下 Data_free 的變化。

CREATE TABLE `t1` ( `k` varchar(3000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

更新語句:update t1 set k='aaa';

更新前長度:223 Data_free:0

更新後長度:3 Data_free:204

Data_free 不為 0,說明有碎片;


產生影響:

1. 由於碎片空間是不連續的,導致這些空間不能充分被利用;

2. 由於碎片的存在,導致資料庫的磁碟 I/O 操作變成離散隨機讀寫,加重了磁碟 I/O 的負擔。


清理辦法:

  • MyISAM:optimize table 表名;(OPTIMIZE 可以整理數據文件,並重排索引)

  • Innodb:

  • 1. ALTER TABLE tablename ENGINE=InnoDB;(重建表存儲引擎,重新組織數據)

    2. 進行一次數據的導入導出

    碎片清理的性能對比:

    引用我之前一個生產庫的數據,對比一下清理前後的差異。

    SQL執行速度:

  • select count(*) from test.twitter_11;


  • 修改前:1 row in set (7.37 sec)

    修改後:1 row in set (1.28 sec)

    結論:

    通過對比,可以看到碎片清理前後,節省了很多空間,SQL執行效率更快。所以,在日常運維工作中,應對碎片進行定期清理,保證資料庫有穩定的性能。

❿ 資料庫存儲空間中碎片產生的原因 及如何回收碎片

以MySQL為例,碎片的存在十分影響性能

MySQL 的碎片是 MySQL 運維過程中比較常見的問題,碎片的存在十分影響資料庫的性能,本文將對 MySQL 碎片進行一次講解。


判斷方法:

MySQL 的碎片是否產生,通過查看

show table status from table_nameG;

這個命令中 Data_free 欄位,如果該欄位不為 0,則產生了數據碎片。


產生的原因:

1. 經常進行 delete 操作

經常進行 delete 操作,產生空白空間,如果進行新的插入操作,MySQL將嘗試利用這些留空的區域,但仍然無法將其徹底佔用,久而久之就產生了碎片;


演示:

創建一張表,往裡面插入數據,進行一個帶有 where 條件或者 limit 的 delete 操作,刪除前後對比一下 Data_free 的變化。

刪除前:

Data_free 不為 0,說明有碎片;


2. update 更新

update 更新可變長度的欄位(例如 varchar 類型),將長的字元串更新成短的。之前存儲的內容長,後來存儲是短的,即使後來插入新數據,那麼有一些空白區域還是沒能有效利用的。

演示:

創建一張表,往裡面插入一條數據,進行一個 update 操作,前後對比一下 Data_free 的變化。

CREATE TABLE `t1` ( `k` varchar(3000) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

更新語句:update t1 set k='aaa';

更新前長度:223 Data_free:0

更新後長度:3 Data_free:204

Data_free 不為 0,說明有碎片;


產生影響:

1. 由於碎片空間是不連續的,導致這些空間不能充分被利用;

2. 由於碎片的存在,導致資料庫的磁碟 I/O 操作變成離散隨機讀寫,加重了磁碟 I/O 的負擔。


清理辦法:

  • MyISAM:optimize table 表名;(OPTIMIZE 可以整理數據文件,並重排索引)

  • Innodb:

  • 1. ALTER TABLE tablename ENGINE=InnoDB;(重建表存儲引擎,重新組織數據)

    2. 進行一次數據的導入導出

    碎片清理的性能對比:

    引用我之前一個生產庫的數據,對比一下清理前後的差異。

    SQL執行速度:

  • select count(*) from test.twitter_11;

  • 修改前:1 row in set (7.37 sec)

    修改後:1 row in set (1.28 sec)

    結論:

    通過對比,可以看到碎片清理前後,節省了很多空間,SQL執行效率更快。所以,在日常運維工作中,應對碎片進行定期清理,保證資料庫有穩定的性能。

熱點內容
電影的文件夾都是 發布:2025-01-18 08:21:49 瀏覽:834
post提交php 發布:2025-01-18 08:21:42 瀏覽:459
如何禁止寫入文件夾 發布:2025-01-18 08:21:04 瀏覽:362
360雲盤等待上傳 發布:2025-01-18 08:21:03 瀏覽:795
安卓手機怎麼設置壁紙 發布:2025-01-18 08:20:23 瀏覽:318
如何關閉密碼鎖 發布:2025-01-18 08:18:51 瀏覽:858
我的電腦ftp打不開 發布:2025-01-18 08:18:05 瀏覽:512
手機如何與伺服器端連接的 發布:2025-01-18 08:16:49 瀏覽:45
為什麼安卓手機玩游戲沒有聲音 發布:2025-01-18 08:11:56 瀏覽:420
androidtextview字體 發布:2025-01-18 07:51:18 瀏覽:555