|
導讀數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數據庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數據集合。 DB2 基本概念 在DB2中由上至下的幾個概念: 實例(Instance), 數據庫(Database), 表空間(TableSpace), 容器(Container) 在一個操作系統中,DB2數據服務可以同時運行多個實例(有別于Oracle在一個系統內只能起一個實例). 數據庫定義在實例中,一個實例可以包含多個數據庫。在同一個實例中的不同數據庫是完全獨立的,分別擁有自己獨立的系統編目表。 表空間有2種管理方式: DMS(Database management Space)方式 SMS(System manegement Space)方式 DMS與SMS方式在表空間建立時指定,建好后不能轉換。對于DMS方式,一個表空間對應了一個或多個容器(Container),容器指定了數據的物理存儲位置。對于SMS方式,只能夠指定一個目錄,不能夠增加。 表空間具有以下類型: 系統編目表空間(SysCatSpace) 系統臨時表空間(SysTempSpace) 用戶表空間(UserSpace) 用戶臨時表空間(UserTempSpace) 一個數據庫中必須存在兩個系統基本的表空間,分別是系統編目表空間與系統臨時表空間。在數據庫中創建的任何對象都以在系統編目表空間中增加記錄的方式體現,對于臨時表空間,其占用磁盤大小是根據使用情況動態伸縮的,即僅在需要時才分配磁盤空間,并在使用后進行回收。此外,若用戶需要創建表,則需要創建用戶表空間,若需要使用臨時表,則需要創建用戶臨時表空間。 容器分為三種類型: Files 文件 Devices 設備 Directory 目錄 文件與設備,用于DMS方式的表空間; 目錄,用于SMS方式的表空間,此種方式不需要人工管理數據存儲文件,DB2可根據情況在目錄中自動增加存儲文件,只要磁盤空間允許。 實質上,表空間是數據存儲的邏輯位置定義,容器則是數據存儲的物理位置定義。 數據庫的性能 影響一個數據庫的性能主要有以下因素: 磁盤(Disk) 內存(Memory) 處理器(CPU) 網絡(Network) 其中以磁盤最為顯著,90%的性能瓶頸可能來自于磁盤的IO競爭; 其次是內存,一方面是指物理內存的總量要滿足需求,另一方面是指與內存相關的配置參數應正確配置; 當然處理器的性能也很重要,多路CPU會對哪些依賴計算能力的復雜SQL查詢起到顯著的效果; 網絡不屬于主要因素,屬于客觀的環境因素,是指過慢的網速會對數據的傳輸造成影響。以下列出一些對于提高數據庫性能有效的方法: 對于運行數據庫服務的服務器可以盡可能的配置多塊物理磁盤,每塊的容量不必太大,這樣可以有效的分擔數據存儲與讀取操作過程的磁盤IO競爭。即采用多塊小容量的磁盤在性能上要優于僅采用一塊大容量的磁盤。 如果條件允許,盡量使數據存儲服務與操作系統分別運行在物理分開的磁盤上。 采用DMS(Database Management Space)管理方式的表空間。 在物理不同的磁盤上創建多個表空間。然后可以將數據和索引分別存放在不同的表空間,這樣可以顯著的提高性能。還可以把一個使用頻繁的大表縱向拆成多個小表,分別存放在不同的表空間中,然后用一個視圖進行聯合。 DB2服務器可以管理裸設備,即除系統以及DB2服務運行磁盤以外,為DB2數據存放單獨準備磁盤,可以是多塊,分區后不需要格式化,創建裸設備后直接交給DB2進行管理,用于存儲數據。 系統的臨時表空間對數據庫性能影響很大,當由管理的物理內存不能滿足數據庫操作的需要時,DB2便會把臨時數據寫到磁盤上,這時便用到了系統臨時表空間,并且這種情況會經常發生。 盡量在磁盤靠近最內層磁道的位置安放數據,因為此處磁盤的訪問速度較快。 與性能相關的主要參數 DB2的參數配置分為兩個級別,一個是實例級別,另一個是數據庫級別。對數據服務性能影響較大的參數主要在數據庫級別配置。以下是三個比較重要的內存配置參數: bufferpagelocklistsortheap bufferpage: 由同一個數據庫中的所有對象共享。 sortheap: 用于排序的內存交換區,非共享,不宜設置太大,否則,很容易引起內存耗盡,因為每一個事務都會申請獨立的內存用于排序。 [page_break] locklist: 共享內存,用于記錄數據服務運行中建立的鎖。建議設置20Mb左右,需要時根據實際情況進行調整。DB2默認使用行級鎖,如果設置太小,當鎖的記錄太多時,則會導致內存不足,此時DB2會把多個行鎖升級為一個表鎖,這樣就會大大降低應用程序的并發性能。如果設置太大,則多分配的內存很少會被用到,導致浪費。 其他的一些配置參數: numdb: 同時可以啟動的實例數目 DB2的常用命令 db2ilist 列出當前系統中定義的DB2實例daslist 列出系統中的DASdb2 list database directory 列出當前實例中定義的數據庫db2 list tablespaces 列出當前數據庫中定義的表空間db2 list tabses [for all] 列出當前數據庫中的表db2 list active db 列出活動的數據庫 db2 get dbm configget db cfg for databasenamedb2 update db cfg for databasename using bufferpage 600Mdb2 alter bufferpool IABMDEFAULTBP size =1db2 list applications show detail 以上命令可以在后面加 " show detail" 參數,顯示詳細信息。 DB2數據存儲的頁大小只能在表空間級別統一指定(區別于Oracle,可以定義在表級別), 并且建好后不能修改。 可以手工建立一個頁大小為4K的DMS用戶臨時表空間,然后把系統默認的SMS系統臨時表空間刪除。為滿足應用需求,一般還應再建立一個頁大小在8K以上的用戶臨時表空間。 DB2 UDB V8.1 對RedHat Linux 9 的支持不好,默認情況下無法啟動GUI安裝程序(可以通過設置環境LD_ASSUME_KERNEL=2.2.5解決),并且不會安裝Sample數據庫,控制中心也無法正常啟動。 DB2 SQL 相關 當使用COUNT()函數時,如果表中的記錄數 > 2 147 483 647行,則函數可能返回錯誤的結果,這時可以使用返回類型為DECIMAL(31, 0)的COUNT_BIG()函數。 DISTINCT 關鍵字可以用在COUNT()函數中,如: SELECT COUNT(DISTINCT id) FROM TABLE 這代表將不對id列的重復值進行計數。 ORDER BY子句后面如果寫了多個列名,需要分別指定升序或是降序。 可以在load大量數據時,暫時關閉表的日志選項。使用: ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY DB2的幾個特殊寄存器: CURRENT DATECURRENT TIMECURRENT TIMESTAMPUSER(用戶ID) 有關日期的操作: CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.) case 語句的使用: case when 條件一 then 動作一 else 動作二 end; 以上可以欠套使用。 在視圖的創建語句中無法使用order by 子句與 fetch n rows 子句。但對于order by可以用如下方法替代實現,不過會影響效率。 create view v_name1(c1, c2, c3) asselect * from (select column1, column2, column3from t1order by column1 ) as t1; 全新的路由器不僅讓你更穩定快速地連接無線網絡,更可以讓家中的智能設備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!