1. 程式人生 > 其它 >KingbaseES中的引數檢視的生效條件與修改⽅式

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級更改引數等。