當前位置:首頁 » 操作系統 » 資料庫分配空間

資料庫分配空間

發布時間: 2022-06-04 01:40:57

『壹』 sql資料庫怎麼為每個用戶分配不同的空間

在UserTB里加多一個欄位[user]存放在User里的用戶名,然後用篩選where [user]='A' --如果是A用戶,其它用戶類似
或是用篩選建立視圖也行

『貳』 SqlServer是如何管理,分配存儲空間的呢

Sql Server 區管理(GAM,SGAM)


大家都知道Sql Server 中數據文件存儲的最小單位是頁面(Page),但實際SQLSERVE並不是以頁面為單位給數據分配空間的,Sql Server默認的存儲分配單位是盤區(Extend)。這樣做的主要原因是為了避免頻繁的讀寫IO,提升性能。在表或其它對象分配存儲空間,不是直接分配一個8K的頁面,而是以一個盤區(Extend)為存儲分配單位,一個盤區為8個頁面(Size = 8*8K=64K)。

這樣,對區得操作就會非常頻繁,也要求Sql Server有自己的一套系統管理著數量眾多的區。其中最突出的出一個問題,那就是在存儲那些只有少量數據,不足8K的對象,如果也是分配給一個盤區,就會存在存儲空間上的浪費,降低了空間分配效率。

為解決上述問題,SQLSERVER提供了一種解決方案,定義了兩種盤區類型,統一盤區和混合盤區。

全局分配映射表 (GAM):統一盤區,GAM 頁記錄已分配的區。每個 GAM 包含 64,000 個區,相當於近 4 GB 的數據。GAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區可用;如果位為 0,則區已分配。

共享全局分配映射表 (SGAM):由多個對象共同擁有該盤區,SGAM 頁記錄當前用作混合區且至少有一個未使用的頁的區。每個 SGAM 包含 64,000 個區,相當於近 4 GB 的數據。SGAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區正用作混合區且有可用頁。如果位為 0,則區未用作混合區,或者雖然用作混合區但其所有頁均在使用中。


在實際為對象分配存儲盤區時,為了提高空間利用率,默認的情況下,如果一個對象一開始大小小於8個頁面,就盡量放在混合盤區中,如果該對象大小增加到8個頁面後,SQLSERVER會為這個對象重新分配一個統一盤區。

據區當前的使用情況,GAM 和 SGAM 中每個區具有以下位模式:



第0個bit為保留位元組,始終為0

第1個bit表示該頁面是否已分配,我們知道GAM頁用來管理區是否已分配,但一個區包含8個頁面,所以用該bit用來准確定位該區的某個頁面是否已分配出去了。

第2個bit表示該頁面是否混合分區的一個頁面。

第3個bit表示該頁面是否是一個IAM(索引分配映射)頁面。

第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。

第5~7個頁面表示該頁面的空間使用率情況。

『叄』 redis多個資料庫 內存怎麼分配的

1、redis 中的每一個資料庫,都由一個 redisDb 的結構存儲。其中,redisDb.id 存儲著 redis 資料庫以整數表示的號碼。redisDb.dict 存儲著該庫所有的鍵值對數據。redisDb.expires 保存著每一個鍵的過期時間。

2、當redis 伺服器初始化時,會預先分配 16 個資料庫(該數量可以通過配置文件配置),所有資料庫保存到結構 redisServer 的一個成員 redisServer.db 數組中。當我們選擇資料庫 select number 時,程序直接通過 redisServer.db[number] 來切換資料庫。有時候當程序需要知道自己是在哪個資料庫時,直接讀取 redisDb.id 即可。

3、既然我們知道一個資料庫的所有鍵值都存儲在redisDb.dict中,那麼我們要知道如果找到key的位置,就有必要了解一下dict 的結構了:

typedef struct dict {

// 特定於類型的處理函數
dictType *type;

// 類型處理函數的私有數據
void *privdata;

// 哈希表(2個)
dictht ht[2];

// 記錄 rehash 進度的標志,值為-1 表示 rehash 未進行
int rehashidx;

// 當前正在運作的安全迭代器數量
int iterators;
} dict;
由上述的結構可以看出,redis 的字典使用哈希表作為其底層實現。dict 類型使用的兩個指向哈希表的指針,其中 0 號哈希表(ht[0])主要用於存儲資料庫的所有鍵值,而1號哈希表主要用於程序對 0 號哈希表進行 rehash 時使用,rehash 一般是在添加新值時會觸發,這里不做過多的贅述。所以redis 中查找一個key,其實就是對進行該dict 結構中的 ht[0] 進行查找操作。

4、既然是哈希,那麼我們知道就會有哈希碰撞,那麼當多個鍵哈希之後為同一個值怎麼辦呢?redis採取鏈表的方式來存儲多個哈希碰撞的鍵。也就是說,當根據key的哈希值找到該列表後,如果列表的長度大於1,那麼我們需要遍歷該鏈表來找到我們所查找的key。當然,一般情況下鏈表長度都為是1,所以時間復雜度可看作o(1)。

二、當redis 拿到一個key 時,如果找到該key的位置。

了解了上述知識之後,我們就可以來分析redis如果在內存找到一個key了。

1、當拿到一個key後, redis 先判斷當前庫的0號哈希表是否為空,即:if (dict->ht[0].size == 0)。如果為true直接返回NULL。

2、判斷該0號哈希表是否需要rehash,因為如果在進行rehash,那麼兩個表中者有可能存儲該key。如果正在進行rehash,將調用一次_dictRehashStep方法,_dictRehashStep 用於對資料庫字典、以及哈希鍵的字典進行被動 rehash,這里不作贅述。

3、計算哈希表,根據當前字典與key進行哈希值的計算。

4、根據哈希值與當前字典計算哈希表的索引值。

5、根據索引值在哈希表中取出鏈表,遍歷該鏈表找到key的位置。一般情況,該鏈表長度為1。

6、當 ht[0] 查找完了之後,再進行了次rehash判斷,如果未在rehashing,則直接結束,否則對ht[1]重復345步驟。

到此我們就找到了key在內存中的位置了。

『肆』 資料庫創建後怎樣修改資料庫數據文件和日誌文件分配的空間大小

--修改資料庫文件增量

USE master
GO
Alter DATABASE Test
MODIFY FILE
(NAME = test,
-- SIZE = 1000MB,
--MAXSIZE = 10000MB,
FILEGROWTH = 100MB)
GO

--修改資料庫日誌文件增量

USE master
GO
Alter DATABASE Test
MODIFY FILE
(NAME = test_log,
-- SIZE = 1000MB,
--MAXSIZE = 10000MB,
FILEGROWTH = 100MB)
GO

參考以下內容:

[c-sharp]view plainprint?
/*
一般的虛擬主機上,附送的sql server資料庫都是限制了大小,比如100M。當你的資料庫空間達到了指定的100M時,插入新數據就會報錯:

未能為資料庫 'a1116173958' 中的對象 'fc_Info' 分配空間,因為文件組 'PRIMARY' 已滿

其實,有些主機商的資料庫大小是可以自己修改的。當然,修改之前你需要知道資料庫名(這里是邏輯名稱),一般的這個名稱是很容易知道的,就是資料庫名稱。

你可以嘗試下在自己編寫的程序中,或空間的管理後台中等可以執行sql語句的地方試一下下面的語句:

Alter DATABASE 資料庫名
modify FILE
( NAME = 資料庫名,
MAXSIZE = 200MB,
FILEGROWTH = 5MB)

如果執行成功,那麼恭喜你了。

========我是分割線============================================

下面是Alter DATABASE的一些參考資料,詳細可以查看sql server幫助。

在資料庫中添加或刪除文件和文件組。也可用於更改文件和文件組的屬性,例如更改文件的名稱和大小。Alter DATABASE 提供了更改資料庫名稱、文件組名稱以及數據文件和日誌文件的邏輯名稱的能力。

Alter DATABASE 支持資料庫選項的設置。在早期版本的 Microsoft® SQL Server™ 中,這些選項可以通過 sp_dboption 存儲過程來設置。在此次發布的版本中,SQL Server 繼續支持 sp_dboption存儲過程,但在未來版本中可能不再支持。可使用 DATABASEPROPERTYEX 函數檢索資料庫選項的當前設置。

語法
Alter DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}

< filespec > ::=

( NAME = logical_file_name
[ , NEWNAME = new_logical_name ]
[ , FILENAME = 'os_file_name' ]
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] )

< optionspec > ::=

<state_option>
| < cursor_option >
| < auto_option >
| < sql_option >
| < recovery_option >
< state_option > ::=
{ SINGLE_USER | RESTRICTED_USER | MULTI_USER }
| { OFFLINE | ONLINE }
| { READ_ONLY | READ_WRITE }

< termination > ::=
ROLLBACK AFTER integer [ SECONDS ]
| ROLLBACK IMMEDIATE
| NO_WAIT
< cursor_option > ::=
CURSOR_CLOSE_ON_COMMIT { ON | OFF }
| CURSOR_DEFAULT { LOCAL | GLOBAL }
< auto_option > ::=
AUTO_CLOSE { ON | OFF }
| AUTO_Create_STATISTICS { ON | OFF }
| AUTO_SHRINK { ON | OFF }
| AUTO_Update_STATISTICS { ON | OFF }
< sql_option > ::=
ANSI_NULL_DEFAULT { ON | OFF }
| ANSI_NULLS { ON | OFF }
| ANSI_PADDING { ON | OFF }
| ANSI_WARNINGS { ON | OFF }
| ARITHABORT { ON | OFF }
| CONCAT_NULL_YIELDS_NULL { ON | OFF }
| NUMERIC_ROUNDABORT { ON | OFF }
| QUOTED_IDENTIFIER { ON | OFF }
| RECURSIVE_TRIGGERS { ON | OFF }
< recovery_option > ::=
RECOVERY { FULL | BULK_LOGGED | SIMPLE }
| TORN_PAGE_DETECTION { ON | OFF }

『伍』 資料庫主機物理內存8G,應該怎麼分配

雖然報內存不足的錯,但不一定是你的機器本身的內存不足造成的,而只是你在安裝oracle的時候可能還在運行其他程序,從而導致內存不足的。你可以把其他比較吃內存的程序關掉,然後再試一下。或者系統重啟以後再安裝一次試一下。

『陸』 sql 備注的一列 長度定義 nvarchar(max)合適嗎 資料庫是怎麼分配空間的

nvarchar(N) 裡面的N 取值范圍是1-4000 也就是最大值是 4000 你這么寫不行

『柒』 物理內存8G,三個資料庫如何分配內存

不管是物理機還是虛擬機內存配置應該是:
操作系統消耗+每個並行資料庫配置的內存<=8G
例如:最多有兩個資料庫並行----操作系統消耗+第1個資料庫分配內存+第2個資料庫分配內存<=8G
三個資料庫全部並行----操作系統消耗+第1個資料庫分配內存+第2個資料庫分配內存+
第3個資料庫分配內存<=8G
每個資料庫的內存分配不一定一樣,根據所安裝的資料庫大小和連接客戶端的多少等情況來考慮。

『捌』 如何給Oracle資料庫分配內存

內存是影響資料庫性能的重要因素,Oracle8i使用靜態內存管理,Oracle 10g使用動態內存管理。所謂靜態內存管理,就是在資料庫系統中,無論是否有用戶連接,也無論並發用量大小,只要資料庫服務在運行,就會分配固定大小的內存;動態內存管理允許在資料庫服務運行時對內存的大小進行修改,讀取大數據塊時使用大內存,小數據塊時使用小內存,讀取標准內存塊時使用標准內存設置。

熱點內容
解壓成光碟0 發布:2024-06-22 19:37:20 瀏覽:998
keil4編譯輸出 發布:2024-06-22 19:37:20 瀏覽:798
方舟怎麼設置私人伺服器 發布:2024-06-22 19:37:18 瀏覽:112
javanpe 發布:2024-06-22 19:32:19 瀏覽:49
weblogiclinux集群部署 發布:2024-06-22 19:29:19 瀏覽:20
入戶上傳 發布:2024-06-22 19:00:37 瀏覽:510
ftp站點是什麼 發布:2024-06-22 19:00:26 瀏覽:683
通過郵箱地址查找伺服器地址 發布:2024-06-22 18:58:53 瀏覽:352
安卓手機亂跳怎麼解決 發布:2024-06-22 18:49:19 瀏覽:885
運動控制源碼 發布:2024-06-22 18:32:45 瀏覽:197