系統元數據
不論是 ,MySQL 還是 SQL ,在數據庫軟件安裝和數據庫創建的時候,都會自動創建一大堆表以及其他諸如視圖、函數、存儲過程之類的對象。這些系統級的表包括的是實例和實例所用到的物理和邏輯屬性的元數據, 和 MySQL 把這些表統稱為數據字典(data ),在 SQL 中則是稱為系統表( )。
在 SQL 2005 及之后的版本,大部分的系統對象都保存在 數據庫中, 少部分保存在 數據庫中。 中,數據字典表是保存在 和 表空間中。在 MySQL 中,則是保存在數據庫里。
從 SQL 2005 開始是無法再直接訪問系統表了,目錄視圖( views)取代系統表作為新的訪問系統元數據的統一的接口。在 中數據字典表名都是加密過的,藉此來減少表被直接訪問或修改,同樣的, 也創建了一系列的視圖用于給DBA和開發人員訪問元數據, 稱這些視圖為數據字典視圖(data views)
目錄視圖的定義存儲在 SQL 的 數據庫中,這些系統視圖歸屬于一個特別的名為 sys 的 用戶架構之下(user )并能從任意數據庫中訪問到。例如,要查看一個 SQL 實例中存在的所有的數據庫,以在任意數據庫下使用下面語句查詢:
SELECT * FROM sys.databases;
要查出任意一個數據庫中的所有對象,則可以使用 sys. 目錄視圖:
SELECT * FROM sys.objects;
中,數據字典從屬于 用戶 SYS。不過不同于 SQL 的時候每個數據字典視圖都存在有三種不同的形式,分別提供三個不同級別的信息。數據字典視圖也就存在三個不同的類型,從視圖名的前綴就能看出視圖能帶來什么樣的信息:
下面的例子展示的兩個查詢反回的結果就是不一樣的:
SELECT table_name, tablespace_name FROM user_tables;
SELECT table_name, tablespace_name FROM dba_tables;
第一個只顯示執行查詢的用戶自己創建的表而第二個則會顯示數據庫中存在的所有的表。
MySQL 中需要授予用戶訪問數據庫的權限去查詢元數據。
其中以開頭的是引擎特有的元數據。MySQL 并沒有把數據字典劃分級別,而是統一的放在一張表里處理。例如,想查詢某個庫里所有的表,可以用如下SQL:
SELECT * FROM information_schema.tables WHERE table_schema='庫名';
啟動與配置參數
在 SQL 安裝的時候,同時也會往 注冊表里面添加一些記錄,這些注冊表鍵值指定了實例所需要的各種參數。比如,有的注冊表鍵值指定了錯誤 日志的保存目錄, 另外的指定了默認的備份目錄等等。SQL 在運行的過程中會使用到這些注冊表鍵值。另外還能給 .EXE 指定一些啟動參數,包括追蹤標志(trace flags),這些附加的參數決定了實例啟動之后的行為。除了注冊表鍵值和啟動參數之外,SQL 還包括大量的內部配置參數,用于對實例進行調優。比如說“max ”就屬于這些參數之一,它可用來調整實例所能使用的最大內存。這些系統配置參數也是保存在系統元數據表( )中的。
下面的方法都可以用來修改 SQL 配置參數:
的配置參數來自兩個對于啟動實例和打開數據庫都是非常重要的操作系統文件, 第一個文件是初始化參數文件 ( file),第二個是控制文件( file)。 初始化參數文件所包括的參數決定怎么樣創建實例。記住 實例只包括內存結構和后臺進程。參數文件包括的值決定了 要給自己分配多少內 存,可以同時有多少用戶可以連接到數據庫等等。 在讀取到這個文件之后才會在內存中建立數據庫實例。
參數文件可以是一個純文本的ASCII文件或者是二進制文件,純文本參數文件稱為pfile,名字為 init.ora, 其中的 SID 就是實例的 SID 了(參照“實例名不 SID”小節)。二進制參數文件稱為 ,名字為 .ora。 純文本參數文件和二進制參數文件之間最大的差別就是當使用pfile 的時候修改表空間名字, 只在實例啟動的時候讀取一次,后續對pfile 的修改都要等到實 例重啟之后才能生效。而使用時, 能在實例運行期間修改其內容。你可以通過 或者是手工的修改這些初始化參數,使用pfile 時,DBA 可以直接使用文本編輯器進行修改,也可以通過 ALTER 命令來修改。只是使用pfile時這些參數的修改是無法保存下來的,同時能修改的也只是一些動態的參數,而使用則可以將這 些修改保存到文件中永麗保留下來。
控制文件是實例啟動之后 第二個要讀取的文件。控制文件所存放的位置也是由參數文件中的參數來指定的。控制文件是一個很小的二進制文件,它包括了不數據庫相關的關鍵的信息,其中包括數據文件和重做日志文件的名字不位置、表空間信息以及檢查點信息, 使用控制文件來找到數據文件,然后才能打開供用戶訪問。控制文件損壞或者是不存在的話數據庫都是無法打開的。考慮到控制文件的重要性,通常的做法都是設置多份相同的控制文件拷貝以保證容錯能力,多路控制文件中的所有控制文件都會同時的被更新。
最后,第三種 數據庫要使用的文件就是密碼文件( file)了,這個文件保存了擁有啟動和關閉數據庫權限的用戶帳戶的用戶名和密碼。
MySQL的配置參數主要來自命令行啟動參數和配置文件f。所有的命令行參數都可以在配置文件中設置。例如可以在命令后加 -- 參數來指定數據文件所在的目錄,也可以在f中添加配置項來指定
在類UNIX系統中,MySQL按照以下的順序來搜索配置文件。
/etc/f/etc/mysql//f$/f~/.f
用戶也可以用SET命令實時設置系統參數。例如想要設置系統最大連接數,可以用以下的任意一條命令:
SET GLOBAL max_connections = 1000;
SET @@global.max_connections = 1000;
如果想要改變用戶級別的配置,則可以用以下的任意一條命令,這樣改變的配置只會影響在此用戶會話期間:
SET SESSION sql_mode = 'TRADITIONAL';
SET @@session.sql_mode = 'TRADITIONAL';
SET @@sql_mode = 'TRADITIONAL';
動態視圖
除了數據字典視圖之外, 還提供大量稱為動態性能視圖( Views)的 視圖,這些視圖可以用來查看實例的內存結構或者是控制文件的內容。不數據字典視圖不同的是,動態性能視圖的內容不是來自于靜態的數據表,而是來自服務器內存中實時的數據。這些數據在實例啟動的時候開始積累,貫穿于整個實例的生命周期之內,在實例重啟或是關閉的時候消失。另外一個不同點就是 DBA 只能在數據 庫打開并在線的時候才能查看數據字典視圖,而動態性能在實例啟動運行之后就能夠查看了。部分的動態性能視圖只能在數據庫MOUNT 之后才能查看。這些視圖 常被稱為 V$視圖,因為它們的名字都是以V$開頭的。例如,下面的查詢可以顯示 實例使用的初始化參數:
SELECT NAME, description, VALUE FROM v$system_parameter;
下面的查詢顯示當前會話相關的信息:
SELECT username, command, schemaname, osuser, machine FROM v$session;
在 SQL 中,動態管理視圖( Views, DMV)也同樣可以顯示實例內存中大量信息。和 動態性能視圖一樣,DMV 也不存在對應的數據表,也在系統重啟之后會重新記錄。DMV 屬于 SYS 架構 ()修改表空間名字,名字以”dm_”開頭, 下面的代碼顯示 SQL 實例當前的會話情況:
SELECT * FROM sys.dm_exec_requests
MySQL 有三種方法顯示動態性能信息。例如同樣要顯示當前的會話信息,第一種是用SHOW 命令:
SHOW PROCESSLIST;
第二種是通過訪問庫相關的表:
SELECT * FROM information_schema.processlist;
第三種是訪問庫的相關表:
SELECT * FROM performance_schema.threads;