KingbaseES中的引數檢視的生效條件與修改⽅式
KingbaseES資料庫的配置引數都在kingbase.conf檔案中,這些引數有些是直接修改就可以生效,有些需要重啟資料庫才能生效,而有些根本就不能修改。資料庫把這些引數分為以下幾類:
internal:這類引數為只讀引數。有些是程式寫死的,有些是在安裝資料庫時intdb時設定好的。
kingbase:這類引數需要重啟資料庫服務才能生效。
sighup:無需重啟資料庫,但要向kingbase程序傳送sighup訊號,即需要作業系統命令sys_ctl reload或進入ksql中, select sys_reload_conf();重新載入配置檔案。
backend:無需重啟資料庫,只需向kingbase程序傳送sighup訊號。但新的配置引數只能在之後的新連線中生效,已有連線中這些引數值不會改變。
superuser:這類引數可以由超級使用者使用set命令修改。引數設定後只會影響超級使用者自身的session配置,不會影響其他使用者。
user:普通使用者使用set命令修改,這類引數修改後和superuser類引數一樣,也是隻影響自身session。
我們可以通過查詢sys_settings表的context欄位值來檢視引數是否需要重啟資料庫生效。如下:
test=# select name,context,pending_restart from sys_settings where name like 'bgwriter%'; name | context | pending_restart -------------------------+---------+----------------- bgwriter_delay | sighup | f bgwriter_flush_after | sighup | f bgwriter_lru_maxpages | sighup | f bgwriter_lru_multiplier | sighup | f
可以通過檢視sys_file_settings檢視你設定的引數是否生效.例如如果你設定了⼀個引數需要重啟資料庫才能生效或者設定錯誤,那麼在此字典中會出現報錯.
1.全域性引數修改:
使用alter system 命令修改引數.使用alter system命令將修改kingbase.auto.conf檔案,而不是kingbase.conf檔案,這樣可以很好的保護kingbase.conf檔案,不要手工對kingbase.auto.conf檔案進行修改。該檔案儲存最新的配置,當資料庫服務重啟時,kingbase.auto.conf 裡的修建項配置優先。當 kingbase.conf 和kingbase.auto.conf兩個檔案中都存在相同引數,kingbase.auto.conf檔案修改無效。
檢視kingbase.auto.conf檔案
[kingbase@localhost data]$ cat kingbase.auto.conf |grep 'work'
work_mem = '8MB'
使用sys_ctl reload命令過載配置檔案,再檢視引數值:
test=# show work_mem;
work_mem
----------
8MB
(1 row)
2.使用set命令,在會話層修改,修改之後將被用於未來的每個事務,但只對當前會話有效。
test=# set work_mem='20MB';
SET
test=#
test=# show work_mem;
work_mem
----------
20MB
(1 row)
這時候再開啟一個會話看到work_mem還是4MB,因為只對當前會話有效。
3.set命令後新增 local關鍵字, 只在當前事務中修改,只在當前事務內有效:
test=# show work_mem;
work_mem
----------
20MB
(1 row)
test=#
test=# begin;
BEGIN
test=# set local work_mem='10MB';
SET
test=#
test=# show work_mem;
work_mem
----------
10MB
(1 row)
test=# commit;
COMMIT
test=# show work_mem;
work_mem
----------
20MB
(1 row)
4.使用 reset恢復引數的預設值
可以通過檢視sys_settings裡的欄位reset_val欄位中的值瞭解此引數恢復預設值的大小。使用reset all可以恢復所有引數值。
test=# select name , reset_val from sys_settings where name like 'work%';
name | reset_val
----------+-----------
work_mem | 8192
(1 row)
test=# show work_mem;
work_mem
----------
20MB
(1 row)
test=# reset work_mem;
RESET
test=# show work_mem;
work_mem
----------
8MB
(1 row)
5.為特定的使用者設定引數
5.1.為特定的資料庫的所有使用者設定引數.
單獨為test資料庫所有的連線設定work_mem為16MB:
test=# alter database test set work_mem='16MB';
ALTER DATABASE
test=#
5.2.為資料庫中的某個使用者設定引數.
例如為bob使用者,設定work_mem為4MB:
test=# alter role bob set work_mem='4MB';
ALTER ROLE
經過測試發現,如果你同時為資料庫和使用者設定了特定引數,那麼以使用者引數為準.例如上面,如果我用bob使用者連線到test資料庫,那麼我的work_mem應該為4MB:
test=# \c test bob
You are now connected to database "test" as user "brent".
test=>
test=# show work_mem;
work_mem
----------
4MB
(1 row)
5.3.為某個使用者連線到特定的資料庫設定引數.
例如為使用者ttname在資料庫test中設定work_mem為8MB
test=> alter role ttname in database test set work_mem='8MB';
ALTER ROLE
上面說的三種設定,優先順序遞增,例如,如果1,2,3全部設定了那麼就以第3個為準,如果設定了1,2那麼就是以2為準。
KingbaseES對此的實現方法和當用戶連線資料庫的時候,手動執行set命令的效果完全相同
檢視你當前的引數值是從何處指定,可以通過查詢sys_setttings中的source欄位獲取,例如如果設定了database級別的引數.那麼查詢結果如下:source為database
test=# select name,setting,source from sys_settings where name='work_mem';
name | setting | source
----------+---------+----------
work_mem | 16384 | database
例如設定了第三種:source為databae user
test=> \c test ttname
You are now connected to database "test" as user "ttname".
test=> select name,setting,source from sys_settings where name='work_mem';
name | setting | source
----------+---------+---------------
work_mem | 8192 | database user
(1 row)
總結:綜上所述,如果通過資料字典檢視檢視引數生效條件。可從全域性或session級更改引數等。