나그네소

Goldilocks Cluster Performance View 본문

sunjesoft/Goldilocks Cluster

Goldilocks Cluster Performance View

나그네소티 2021. 9. 2. 19:04

[ table sharding key 조회 ]

gSQL> select * from user_shard_key_columns;

 

TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_POSITION

------------ ---------- ----------- ---------------

PUBLIC       T1         C1                        1

PUBLIC       T2         C1                        1

 

 

[ local member 확인 ]

select local_member_name() from dual;

==============================

LOCAL_MEMBER_NAME()

G1N1

 

 

[ \ddl_cluster ]

cluster 정보 출력.

 

 

[ sharding key, 속성 확인 ]

gSQL> select SHARDING_STRATEGY from DEFINITION_SCHEMA.TABLES where table_name='CUSER';

 

SHARDING_STRATEGY

-----------------

HASH SHARDING

 

[shard 배치 정보]

SELECT group_name, COUNT(*) AS shard_count

  FROM USER_TAB_SHARDS

 WHERE TABLE_NAME = 'T1'

 GROUP BY group_name;

 

- data 분배 정보

SELECT CLUSTER_GROUP_NAME, COUNT(*) AS row_count

  FROM t1

 GROUP BY CLUSTER_GROUP_NAME;

 

 

[ X$CLUSTER_DISPATCHER ]       

gSQL> select * from X$CLUSTER_DISPATCHER ;

 

DISPATCHER_ID RX_BYTES TX_BYTES RX_JOBS TX_JOBS

------------- -------- -------- ------- -------

            0   221691    80043    3224    1620

            0    80262   221691    3231    1632

 

RX_BYTES : dispatcher받는량 (byte) / Member 와 Member간의 cdispatcher간의 받는량을 확인 할 수 있다.

TX_BYTES : dispatcher보낸량 (byte) / Member 와 Member간의 cdispatcher간의 보낸량을 확인 할 수 있다.

 

정리 : 실제 1초 기록 60초후 기록 60-1초간의 받은/보낸 전송량을 측정 하여 비교 할 수 있을 것으로 보인다.

 

[X$CLUSTER_SERVER]           

gSQL> select * from X$CLUSTER_SERVER;

 

NAME        ID OS_PROC_ID PROCESSED_JOBS NUMA_STREAM_ID

----------- -- ---------- -------------- --------------

MASTER       0       5835              1             -1

MASTER       1       5837              2             -1

MASTER       2       5839              2             -1

MASTER       3       5841              2             -1

MASTER       4       5843              1             -1

MASTER       5       5845              0             -1

MASTER       6       5847              1             -1

MASTER       7       5849              1             -1

MASTER       8       5851              1             -1

MASTER       9       5853              0             -1

SYNC         0       5855              0             -1

SYNC         1       5857              0             -1

SYNC         2       5859              0             -1

COMMIT       0       5863              1             -1

COORDINATOR  0       5865           1537             -1

URGENT       0       5861              0             -1

MASTER       0      62408              5             -1

MASTER       1      62410              7             -1

MASTER       2      62412              5             -1

MASTER       3      62414              8             -1

MASTER       4      62416              6             -1

MASTER       5      62418              5             -1

MASTER       6      62420              9             -1

MASTER       7      62422              6             -1

MASTER       8      62424              7             -1

MASTER       9      62426              4             -1

SYNC         0      62428              0             -1

SYNC         1      62430              0             -1

SYNC         2      62432              0             -1

COMMIT       0      62436              0             -1

COORDINATOR  0      62438           1524             -1

URGENT       0      62434              0             -1

 

 

[X$CL_SYSTEM_INFO]

global commit 조회 하는 view

 

gSQL> select * from X$CL_SYSTEM_INFO;

 

NAME                 VALUE CATEGORY COMMENTS                                 

-------------------- ----- -------- -----------------------------------------

GLOBAL_COMMIT_COUNT      0        0 globally committed count                 

CM_BUFFER_MISS_COUNT     0        0 latch miss count on communication buffer

FAILOVER_ENV_ID         46        0 environment identifier of cluster monitor

GLOBAL_COMMIT_COUNT      0        0 globally committed count                 

CM_BUFFER_MISS_COUNT     0        0 latch miss count on communication buffer

FAILOVER_ENV_ID         46        0 environment identifier of cluster monitor

 

CM_BUFFER_MISS_COUNT : CM Buffer에 데이터를 넣기 위하여 spin lock try 하는데 이에 실패 시 count가

증가 한다. hash type이나 replica에서 전송 시 위의 값이 증가 한다면 성능이 지연 될 수 있다. 그리고 session이

여러개 한꺼번에 접속 시 증가 한다.

 

 

[X$CLUSTER_LOCATION]

gSQL> select * from X$CLUSTER_LOCATION ;

MEMBER_NAME HOST           PORT

----------- ------------- -----

G1N1        192.168.0.222 10101

 

[X$CLUSTER_MEMBER]

cluster 관계가 정상 적으로 설정 되어 있는지 확인.

 

gSQL> select * from X$CLUSTER_MEMBER ;

 

MEMBER_ID MEMBER_POSITION LOGICAL_CONNECTION PHYSICAL_CONNECTION SERIAL IS_GLOBAL_COORD IS_DOMAIN_COORD LOCAL_SCN AGABLE_STMT_SCN

--------- --------------- ------------------ ------------------- ------ --------------- --------------- --------- ---------------

        1               0 ACTIVE             ACTIVE                   2 TRUE            TRUE            0.473.10  0.473.10       

 

1 row selected.

 

[x$instance]

gSQL> select * from x$instance;

 

VERSION                           STARTUP_TIME               STATUS OS_USER_ID IS_CLUSTER LOCAL_GROUP_ID LOCAL_MEMBER_ID LOCAL_MEMBER_NAME LOCAL_MEMBER_POSITION

--------------------------------- -------------------------- ------ ---------- ---------- -------------- --------------- ----------------- ---------------------

Debug Trunk.3.1.0 revision(19944) 2016-11-04 00:53:24.666821 OPEN          507 TRUE                    2               2 G2N1                                  1

Debug Trunk.3.1.0 revision(19944) 2016-11-04 00:46:42.611737 OPEN          503 TRUE                    1               1 G1N1                                  0

 

2 rows selected.

 

[X$CLUSTER_QUEUE]

gSQL> select * from X$CLUSTER_QUEUE                 ;

 

NAME           ID QUEUED FULL_COUNT TOTALQ

-------------- -- ------ ---------- ------

MASTER_IN       0      0          0     11

MASTER_OUT      0      0          0   1276

SYNC_IN         0      0          0      0

SYNC_IN         1      0          0      0

SYNC_IN         2      0          0      0

COMMIT_IN       0      0          0      1

COORDINATOR_IN  0      0          0      0

URGENT_IN       0      0          0   1251

RECOVER_OUT     0      0          0      1

MASTER_IN       0      0          0     23

MASTER_OUT      0      0          0   1285

SYNC_IN         0      0          0      0

SYNC_IN         1      0          0      0

SYNC_IN         2      0          0      0

COMMIT_IN       0      0          0      0

COORDINATOR_IN  0      0          0      0

URGENT_IN       0      0          0   1238

RECOVER_OUT     0      0          0      1

 

 

[X$CONTROLFILE_CLUSTER_MEMBER]

gSQL> select * from X$CONTROLFILE_CLUSTER_MEMBER;

 

MEMBER_NAME IS_LOCAL_MEMBER GROUP_ID MEMBER_ID MEMBER_POSITION

----------- --------------- -------- --------- ---------------

G1N1        FALSE                  1         1               0

G2N1        TRUE                   2         2               1

G1N1        TRUE                   1         1               0

G2N1        FALSE                  2         2               1

 

4 rows selected.

 

[X$CL_LATENCY_STAT]

cdispatcher에 패킷 전송 시간 확인

 

gSQL> select * from X$CL_LATENCY_STAT@local where TOTAL_LATENCY > 0;

 

SESSION_ID COMMAND_TYPE REQ_QUEUEING1 REQ_TRANSMISSION REQ_QUEUEING2

---------- ------------ ------------- ---------------- -------------

REQ_PROCESSING RES_QUEUEING1 RES_TRANSMISSION RES_QUEUEING2 TOTAL_LATENCY

-------------- ------------- ---------------- ------------- -------------

         4            5             2               58            36

            23             1               58             7           186

         4            5            48              408            35

            23             1              408            29           953

         4            5             2              639            36

            25             1              639            28          1370

         4            5            50              152            35

            22             1              152            10           422

         4            5             2          1273983            40

            26             1          1273983            30       2548065

         4            5             1               77             7

 

--> 전송 시간이 엄청 많네 (transmission 마이크로초) 요걸로 현재 네트워크에 문제가 있다고 판단할 수 있다.

 

 

[local member 확인]

select local_member_name() from dual;

 

LOCAL_MEMBER_NAME()

=====================

G1N1

 

gSQL> select LOCAL_GROUP_NAME() from dual;

 

LOCAL_GROUP_NAME()

------------------

G2

 

gSQL> select LOCAL_MEMBER_ID() from dual;

 

LOCAL_MEMBER_ID()

-----------------

                2

 

gSQL> select LOCAL_GROUP_ID() from dual;

 

LOCAL_GROUP_ID()

----------------

               2

 

[ 스키마 확인 ]

gSQL> select * from definition_schema.catalog_name@local;

 

CATALOG_ID CATALOG_NAME IS_CLUSTER LOCAL_MEMBER_NAME CHARACTER_SET_ID

---------- ------------ ---------- ----------------- ----------------

CHARACTER_SET_NAME CHAR_LENGTH_UNITS_ID CHAR_LENGTH_UNITS TIME_ZONE_INTERVAL

------------------ -------------------- ----------------- ------------------

DEFAULT_DATA_TABLESPACE_ID DEFAULT_TEMP_TABLESPACE_ID CREATED_TIME             

-------------------------- -------------------------- --------------------------

MODIFIED_TIME              COMMENTS     

-------------------------- --------------

         1 TEST_DB      TRUE       G10N                             1

UTF8                                  2 OCTETS            +00 09:00:00     

                         2                          3 2016-11-04 16:48:31.380000

2016-11-04 16:48:31.380000 sundb database

 

1 row selected.

 

1) DEFINITION_SCHEMA.CLUSTER_GROUP

 

column type 비고
GROUP_ID BIGINT primary key
GROUP_NAME VARCHAR(128) unique key
ORDINAL_POSITION INTEGER 1-base
CREATED_TIME TIMESTAMP(2) not null
MODIFIED_TIME TIMESTAMP(2) not null
COMMENTS VARCHAR(1024)  

 

 

gSQL> select * from DEFINITION_SCHEMA.CLUSTER_GROUP;

 

GROUP_ID GROUP_NAME CREATED_TIME               MODIFIED_TIME              COMMENTS

-------- ---------- -------------------------- -------------------------- --------

       1 G1         2016-09-20 17:40:53.030000 2016-09-20 17:40:53.030000 null   

       2 G2         2016-09-20 17:40:55.380000 2016-09-20 17:40:55.380000 null   

       1 G1         2016-09-20 17:40:53.030000 2016-09-20 17:40:53.030000 null   

       2 G2         2016-09-20 17:40:55.380000 2016-09-20 17:40:55.380000 null

 

2) DEFINITION_SCHEMA.CLUSTER_MEMBER

 

 

     
column type 비고
GROUP_ID BIGINT foreign key references ( SERVER_GROUP.GROUP_ID )
MEMBER_ID BIGINT primary key
MEMBER_NAME VARCHAR(128) unique key
ORDINAL_POSITION INTEGER 1-base
IP_ADDRESS VARCHAR(128) ip address 가 변경되면 어떡하지?
CLUSTER_PORT INTEGER  
CREATED_TIME TIMESTAMP(2)  
MODIFIED_TIME TIMESTAMP(2)  
COMMENTS VARCHAR(1024)  

 

 

gSQL> select * from DEFINITION_SCHEMA.CLUSTER_MEMBER2 ;

GROUP_ID MEMBER_ID MEMBER_NAME MEMBER_POSITION IS_LEFT CREATED_TIME               MODIFIED_TIME              COMMENTS

-------- --------- ----------- --------------- ------- -------------------------- -------------------------- --------

       1         1 G1N1                      0 FALSE   2016-09-20 17:40:53.030000 2016-09-20 17:40:53.030000 null   

       2         2 G2N1                      1 FALSE   2016-09-20 17:40:55.380000 2016-09-20 17:40:55.380000 null   

       1         1 G1N1                      0 FALSE   2016-09-20 17:40:53.030000 2016-09-20 17:40:53.030000 null   

       2         2 G2N1                      1 FALSE   2016-09-20 17:40:55.380000 2016-09-20 17:40:55.380000 null 

 

3) DEFINITION_SCHEMA.LOCAL_CLUSTER_MEMBER

 

column type 비고
GROUP_ID BIGINT my server group id, references CLUSTER_GROUP.GROUP_ID
MEMBER_ID BIGINT my server node id, references CLUSTER_MEMBER.MEMBER_ID

 

 

gSQL> select * from DEFINITION_SCHEMA.LOCAL_CLUSTER_MEMBER;

MAX_GROUP_ID MAX_MEMBER_ID NODE_GROUP_ID NODE_MEMBER_ID CLUSTER_SIGNATURE               

------------ ------------- ------------- -------------- --------------------------------

           2             2             1              1 F0A935707F0D11E687997199B2A884CE

           2             2             2              2 F0A935707F0D11E687997199B2A884CE

 

 

 

 

[ data 분배 정보 ]

SELECT CLUSTER_GROUP_NAME, COUNT(*) AS row_count

  FROM t1

 GROUP BY CLUSTER_GROUP_NAME;

 

 

[ table shard 정보 ]

gSQL> select table_name, SHARDING_STRATEGY from definition_schema.tables where table_name='CUSER';

 

TABLE_NAME SHARDING_STRATEGY

---------- -----------------

CUSER      HASH SHARDING   

CUSER      HASH SHARDING   

CUSER      HASH SHARDING

 

[ shard key 정보 출력 ]

 

select o.username, t.table_name, c.column_name, t. SHARDING_STRATEGY, a.ORDINAL_POSITION

  from definition_schema.columns@local c, DEFINITION_SCHEMA.SHARD_KEY_COLUMN_USAGE@local a, definition_schema.tables@local t, all_users o

 where c.COLUMN_ID = a.COLUMN_ID and a.table_id = t.table_id and a.owner_id = o.user_id;

 

USERNAME TABLE_NAME COLUMN_NAME SHARDING_STRATEGY ORDINAL_POSITION

-------- ---------- ----------- ----------------- ----------------

TEST     CUSER      USER_ID     HASH SHARDING                    1

TEST     T1         C1          HASH SHARDING                    1

 

--> cluster 정보 출력

 

 

[ DEFINITION_SCHEMA.SHARD_LIST ]

cluster list에 대한 정보를 확인 할 수 있다.

 

[  DEFINITION_SCHEMA.SHARD_RANGE ]

cluster range 관련 된 정보를 확인 할 수 있다.

 

gSQL> select * from  DEFINITION_SCHEMA.SHARD_RANGE@local;

OWNER_ID SCHEMA_ID TABLE_ID SHARD_NO SHARD_NAME GROUP_ID VALUE_STRING VALUE_COUNT VALUE_BUFFER_SIZE VALUE_BINARY                                       

-------- --------- -------- -------- ---------- -------- ------------ ----------- ----------------- ----------------------------------------------------

       6         7   100283        0 S1                1 ( 2 )                  1                 8 0700000008000000020000000000000070953ED9097F0000C103

       6         7   100283        1 S2                2 ( 3 )                  1                 8 07000000080000000200000000000000B8993ED9097F0000C104

       6         7   100283        2 S3                3 ( 4 )                  1                 8 07000000080000000200000000000000009E3ED9097F0000C105

       6         7   100283        3 S4                3 ( MAXVALUE )           1                 1 07000000010000000000000000000000C89E3ED9097F0000

 

 

[ DEFINITION_SCHEMA.CLUSTER_GROUP ]

cluster group에 대한 정보를 확인 할 수 있다.

 

gSQL> select * from DEFINITION_SCHEMA.CLUSTER_GROUP@local;

 

GROUP_ID GROUP_NAME CREATED_TIME               MODIFIED_TIME              COMMENTS

-------- ---------- -------------------------- -------------------------- --------

       1 G1         2016-11-11 20:20:53.100000 2016-11-11 20:20:53.100000 null   

       2 G2         2016-11-11 20:20:59.960000 2016-11-11 20:20:59.960000 null   

       3 G3         2016-11-11 20:26:58.150000 2016-11-11 20:26:58.150000 null

 

[ definition_schema.cluster_member ]

cluster member 정보에 대하여 확인 할 수 있다.

 

gSQL> select group_id,member_id,member_name,member_position from definition_schema.cluster_member@local;

 

GROUP_ID MEMBER_ID MEMBER_NAME MEMBER_POSITION

-------- --------- ----------- ---------------

       1         1 G1N1                      0

       2         2 G2N1                      1

       3         3 G3N1                      2

 

[ DEFINITION_SCHEMA.LOCAL_CLUSTER_MEMBER ]

local group member에 대한 정보를 확인 할 수 있다.

 

gSQL> select * from DEFINITION_SCHEMA.LOCAL_CLUSTER_MEMBER@local;

 

MAX_GROUP_ID MAX_MEMBER_ID NODE_GROUP_ID NODE_MEMBER_ID CLUSTER_SIGNATURE               

------------ ------------- ------------- -------------- --------------------------------

           3             3             2              2 E83AB924A80011E686D739D90B7DF6EC

 

 

[ DEFINITION_SCHEMA.SHARD_KEY_COLUMN_USAGE ]

사용되는 shard key 값에 대한 정보를 확인 할 수 있다.

 

gSQL> select * from DEFINITION_SCHEMA.SHARD_KEY_COLUMN_USAGE@local ;

 

OWNER_ID SCHEMA_ID TABLE_ID COLUMN_ID ORDINAL_POSITION

-------- --------- -------- --------- ----------------

       6         7   100281    102832                1

       6         7   100282    102844                1

 

- 위의 schema 이용하여 아래의 결과 도출

 

select o.username, t.table_name, c.column_name, t. SHARDING_STRATEGY, a.ORDINAL_POSITION

  from definition_schema.columns@local c, DEFINITION_SCHEMA.SHARD_KEY_COLUMN_USAGE@local a, definition_schema.tables@local t, all_users o

 where c.COLUMN_ID = a.COLUMN_ID and a.table_id = t.table_id and a.owner_id = o.user_id;

 

--> cluster 정보 출력

 

[ OFFLINE 된 테이블 확인 ]

select * from TABLE_MEMBER_MAP@local;

 

gSQL> select * from TABLE_MEMBER_MAP@local;

 

OWNER_ID SCHEMA_ID TABLE_ID GROUP_ID MEMBER_ID IS_OFFLINE

-------- --------- -------- -------- --------- ----------

       2         3   100131        1         1 FALSE

       2         3   100131        4         4 FALSE

       2         3   100131        5         5 FALSE

       2         3   100131        6         6 FALSE

       2         3   100137        1         1 FALSE

       2         3   100137        4         4 FALSE

       2         3   100137        5         5 FALSE

       2         3   100137        6         6 FALSE

       2         3   100131        2         2 TRUE

       2         3   100131        3         3 TRUE

       2         3   100134        2         2 TRUE

       2         3   100134        3         3 TRUE

       2         3   100137        2         2 TRUE

       2         3   100137        3         3 TRUE

       2         7   100325        2         2 TRUE

       2         7   100325        3         3 TRUE

       2         3   100134        1         1 FALSE

       2         3   100134        4         4 FALSE

       2         3   100134        5         5 FALSE

       2         3   100134        6         6 FALSE

       2         7   100325        1         1 FALSE

       2         7   100325        4         4 FALSE

       2         7   100325        5         5 FALSE

       2         7   100325        6         6 FALSE

 

--> IS_OFFLINE에 TRUE로 되어 있으면 테이블이 OFF로 되어 있는 것이다. 이 때에는 rebalance를 하여

정상화 시켜 준다.

 

gSQL> alter database rebalance;

 

Database altered.

 

[ USER_IND_PLACE ]

gSQL> select * from USER_IND_PLACE@local;

 

INDEX_SCHEMA INDEX_NAME                TABLE_OWNER TABLE_SCHEMA TABLE_NAME GROUP_ID GROUP_NAME MEMBER_ID MEMBER_NAME DISTINCT_KEYS SAMPLE_SIZE BLOCKS LAST_ANALYZED

------------ ------------------------- ----------- ------------ ---------- -------- ---------- --------- ----------- ------------- ----------- ------ -------------

PUBLIC       CUSER_PK_IDX              TEST        PUBLIC       CUSER             2 G2                 2 G2N1                 null        null     64 null         

PUBLIC       CDRLOAD_PRIMARY_KEY_INDEX TEST        PUBLIC       CDRLOAD           2 G2                 2 G2N1                 null        null     64 null

 

--> 정확히 뭔지 모르겠음?????

 

 

[ USER_COL_PLACE ]

cluster column 정보를 확인 할 수 있는 것으로 보임 정확히는 모르겠음 ???

gSQL> select * from USER_COL_PLACE@local;

 

TABLE_SCHEMA TABLE_NAME COLUMN_NAME     GROUP_ID GROUP_NAME MEMBER_ID MEMBER_NAME MEMBER_OFFLINE NUM_DISTINCT LOW_VALUE HIGH_VALUE NUM_NULLS AVG_COL_LEN SAMPLE_SIZE LAST_ANALYZED

------------ ---------- --------------- -------- ---------- --------- ----------- -------------- ------------ --------- ---------- --------- ----------- ----------- -------------

PUBLIC       CUSER      USER_ID                1 G1                 1 G1N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      USER_ID                2 G2                 2 G2N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      USER_ID                3 G3                 3 G3N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      ACCT_ID                1 G1                 1 G1N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      ACCT_ID                2 G2                 2 G2N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      ACCT_ID                3 G3                 3 G3N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      IMSI                   1 G1                 1 G1N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      IMSI                   2 G2                 2 G2N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      IMSI                   3 G3                 3 G3N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      MSISDN                 1 G1                 1 G1N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      MSISDN                 2 G2                 2 G2N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      MSISDN                 3 G3                 3 G3N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      HOME_CITY              1 G1                 1 G1N1        FALSE                  null null      null            null        null        null null         

PUBLIC       CUSER      HOME_CITY              2 G2                 2 G2N1        FALSE                  null null      null            null        null        null null

 

[ USER_TAB_PLACE ]

cluster 에서 현재 사용 하고 있는 테이블에 대한 상태를 확인 할 수 있다.

 

gSQL> select * from USER_TAB_PLACE@local;

 

TABLE_SCHEMA TABLE_NAME GROUP_ID GROUP_NAME MEMBER_ID MEMBER_NAME MEMBER_OFFLINE SCN        NUM_ROWS BLOCKS LAST_ANALYZED

------------ ---------- -------- ---------- --------- ----------- -------------- ---------- -------- ------ -------------

PUBLIC       CUSER             2 G2                 2 G2N1        FALSE          3750.0.873     null    512 null         

PUBLIC       T1                2 G2                 2 G2N1        FALSE          3751.0.873     null    512 null         

PUBLIC       CDRLOAD           2 G2                 2 G2N1        FALSE          3754.0.874     null     64 null         

PUBLIC       T3                2 G2                 2 G2N1        FALSE          3755.0.874     null     64 null

 

--> MEMBER_OFFLINE : FALSE으면 현재 정상 적인 상태로 분배가 되어 있다는 것을 알 수 있다.

만약 2by2로 구성 후 2by1에서 비정상 종료가 발생 되고 다시 2by1 restart 한 후 상태를 보면

해당 MEMBER_OFFLINE : TRUE로 되어 있어 2by2와의 balance가 필요한 상태가 되어 있다는 것을

위의 정보를 확인 할 수 있으며 위의 TRUE->FALE 상태로 alter system rebalance 명령어로 맞츄어

주면 다시 FALSE 상태로 변경이 되면 이후 부터 정상 적으로 업무 처리를 진행 할 수 있다.

 

 

[ USER_CLUSTER_TABLES ]

cluster table에 대한 정보를 확인 할 수 있다.

 

select * from USER_CLUSTER_TABLES;

 

TABLE_SCHEMA TABLE_NAME SHARD_STRATEGY SHARD_PLACEMENT  SHARD_COUNT SHARD_KEY_COUNT

------------ ---------- -------------- ---------------- ----------- ---------------

PUBLIC       CUSER      HASH SHARDING  AT CLUSTER WIDE           24               1

PUBLIC       T1         HASH SHARDING  AT CLUSTER WIDE           24               1

PUBLIC       CDRLOAD    RANGE SHARDING AT CLUSTER GROUP           4               1

PUBLIC       T3         LIST SHARDING  AT CLUSTER GROUP           3               1

 

 

[ USER_SHARD_KEY_COLUMNS ]

cluster column에 대한 정보를 확인 할 수 있다.

 

gSQL> select * from USER_SHARD_KEY_COLUMNS;

 

TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_POSITION

------------ ---------- ----------- ---------------

PUBLIC       CUSER      USER_ID                   1

PUBLIC       T1         C1                        1

PUBLIC       CDRLOAD    NODE_NUM                  1

PUBLIC       T3         CITY                      1

 

 

[ USER_TAB_SHARDS ]

cluster shard key에 관련 된 정보를 확인 할 수 있다.

 

gSQL> select * from USER_TAB_SHARDS

 

TABLE_SCHEMA TABLE_NAME SHARD_STRATEGY SHARD_NAME   SHARD_NUMBER SHARD_DEFINITION                     GROUP_ID GROUP_NAME

------------ ---------- -------------- ------------ ------------ ------------------------------------ -------- ----------

PUBLIC       CUSER      HASH SHARDING  SHARD_000000            0 null                                        1 G1       

PUBLIC       CUSER      HASH SHARDING  SHARD_000001            1 null                                        2 G2       

PUBLIC       CUSER      HASH SHARDING  SHARD_000002            2 null                                        3 G3       

PUBLIC       CUSER      HASH SHARDING  SHARD_000003            3 null                                        2 G2

 

SELECT group_name, COUNT(*) AS shard_count

  FROM USER_TAB_SHARDS

 WHERE TABLE_NAME = 'T1'

 GROUP BY group_name;

 

GROUP_NAME SHARD_COUNT

---------- -----------

G2                   8

G3                   8

G1                   8

 

[ table sharding key 조회 ]

gSQL> select * from user_shard_key_columns;

 

TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_POSITION

------------ ---------- ----------- ---------------

PUBLIC       T1         C1                        1

PUBLIC       T2         C1                        1

 

[ user_tab_place ]

사용자가 접근 가능한 cluster table 의 배치 정보

 

gSQL> select * from user_tab_place where table_name = 'T1';

 

TABLE_SCHEMA TABLE_NAME GROUP_ID GROUP_NAME MEMBER_ID MEMBER_NAME MEMBER_OFFLINE

------------ ---------- -------- ---------- --------- -----------

--------------

SCN       NUM_ROWS BLOCKS LAST_ANALYZED

--------- -------- ------ -------------

PUBLIC       T1                1 G1                 1 G1N1 FALSE

486.2.19      null    512 null

PUBLIC       T1                1 G1                 2 G1N2 FALSE

486.2.883     null    512 null

PUBLIC       T1                2 G2                 3 G2N1 FALSE

486.0.883     null    512 null

PUBLIC       T1                2 G2                 4 G2N2 FALSE

486.0.883     null    512 null

PUBLIC       T1                3 G3                 5 G3N1 FALSE

486.0.883     null    512 null

PUBLIC       T1                3 G3                 6 G3N2 TRUE

485.0.878     null    512 null

 

6 rows selected.

 

[ shard 배치 정보 ]

SELECT group_name, COUNT(*) AS shard_count

  FROM USER_TAB_SHARDS

 WHERE TABLE_NAME = 'T1'

 GROUP BY group_name;

 

<< cluster view >>

1. CLUSTER_GROUP_ID Pseudo Column

CLUSTER_GROUP_ID pseudo column은 레코드 저장된 server의 Group 식별자를 반환한다.

 

gSQL> SELECT T1.C1, T1.CLUSTER_GROUP_ID FROM T1;

C1 T1.CLUSTER_GROUP_ID

-- -------------------

A 1

B 2

C 3

 

--> row 단위 cluster group 정보를 알 수 있다.

 

2. CLUSTER_MEMBER_ID Pseudo Column

CLUSTER_MEMBER_ID pseudo column은 레코드 저장된 server의 Member 식별자를 반환한다.

 

gSQL> SELECT T1.C1, T1.CLUSTER_MEMBER_ID FROM T1;

C1 T1.CLUSTER_MEMBER_ID

-- --------------------

A 1

B 3

C 5

 

--> row 단위 cluster member 정보를 알 수 있다.

 

3. CLUSTER_GROUP_NAME Pseudo Column

CLUSTER_GROUP_NAME pseudo column은 레코드 저장된 server의 Group 이름을 반환한다.

gSQL> SELECT T1.C1, T1.CLUSTER_GROUP_NAME FROM T1;

C1 T1.CLUSTER_GROUP_NAME

-- ---------------------

A G1

B G2

C G3

 

--> cluster group name 알 수 있다.

 

4. CLUSTER_MEMBER_NAME Pseudo Column

CLUSTER_MEMBER_NAME pseudo column은 레코드 저장된 server의 Member 이름을 반환한다.

gSQL> SELECT T1.C1, T1.CLUSTER_MEMBER_NAME FROM T1;

C1 T1.CLUSTER_MEMBER_NAME

-- ----------------------

A G1N1

B G2N1

C G3N1

 

--> cluster member name 알 수 있다.

 

<< dba_ view >>

DBA_CLUSTER : cluster 를 구성하는 cluster group, cluster member 의 객체 정보

DBA_CLUSTER_COMMENTS : cluster group 과 cluster member 의 주석 정보

 

<< ALL_ view >>

- ALL_CLUSTER_TABLES  : 사용자가 접근 가능한 cluster table 의 정보

gSQL> select  * from all_cluster_tables;

 

OWNER TABLE_SCHEMA      TABLE_NAME               SHARD_STRATEGY SHARD_PLACEMENT SHARD_COUNT SHARD_KEY_COUNT HAS_GSI

----- ----------------- ------------------------ -------------- --------------- ----------- --------------- -------

SYS   DICTIONARY_SCHEMA DBC_TABLE_TYPE_INFO      CLONED         AT CLUSTER WIDE        null            null YES   

SYS   DICTIONARY_SCHEMA JDBC_CLIENT_PROPS        CLONED         AT CLUSTER WIDE        null            null YES   

SYS   DICTIONARY_SCHEMA IMPLEMENTATION_INFO_BASE CLONED         AT CLUSTER WIDE        null            null YES   

TEST  PUBLIC            T3                       CLONED         AT CLUSTER WIDE        null            null YES   

TEST  PUBLIC            T4                       CLONED         AT CLUSTER WIDE        null            null YES   

TEST  PUBLIC            T5                       CLONED         AT CLUSTER WIDE        null            null YES

 

- ALL_SHARD_KEY_COLUMNS : 사용자가 접근 가능한 cluster table 의 shard key column 정보

 

- ALL_TAB_PLACE : 사용자가 접근 가능한 cluster table 의 배치 정보

gSQL> select * from all_tab_place;

 

OWNER TABLE_SCHEMA      TABLE_NAME               GROUP_ID GROUP_NAME MEMBER_ID MEMBER_NAME MEMBER_OFFLINE SCN        NUM_ROWS BLOCKS LAST_ANALYZED

----- ----------------- ------------------------ -------- ---------- --------- ----------- -------------- ---------- -------- ------ -------------

SYS   DICTIONARY_SCHEMA DBC_TABLE_TYPE_INFO             1 G2                 1 G2N1        FALSE          870.2.68       null     64 null         

SYS   DICTIONARY_SCHEMA DBC_TABLE_TYPE_INFO             2 G3                 2 G3N1        FALSE          870.3.927      null     64 null         

SYS   DICTIONARY_SCHEMA JDBC_CLIENT_PROPS               1 G2                 1 G2N1        FALSE          878.2.71       null     64 null         

SYS   DICTIONARY_SCHEMA JDBC_CLIENT_PROPS               2 G3                 2 G3N1        FALSE          878.3.930      null     64 null         

SYS   DICTIONARY_SCHEMA IMPLEMENTATION_INFO_BASE        1 G2                 1 G2N1        FALSE          887.2.78       null     64 null         

SYS   DICTIONARY_SCHEMA IMPLEMENTATION_INFO_BASE        2 G3                 2 G3N1        FALSE          887.3.937      null     64 null         

TEST  PUBLIC            T3                              1 G2                 1 G2N1        FALSE          562.1.30       null     64 null         

TEST  PUBLIC            T3                              2 G3                 2 G3N1        FALSE          562.3.888      null     64 null

 

- ALL_TAB_SHARDS : 사용자가 접근 가능한 cluster table 의 shard 정보

 

 

[ cluster 유효 함수 ]

- LOCAL_GROUP_ID

사용자 질의를 받아 수행하는 Server에 대한 Cluster Group ID를 반환하는 함수

 

gSQL> SELECT LOCAL_GROUP_ID() FROM DUAL;

LOCAL_GROUP_ID()

----------------

1

 

- LOCAL_GROUP_NAME

사용자 질의를 받아 수행하는 Server에 대한 Cluster Group Name을 반환하는 함수

 

gSQL> SELECT LOCAL_GROUP_NAME() FROM DUAL;

LOCAL_GROUP_NAME()

------------------

G1

 

- LOCAL_MEMBER_ID

사용자 질의를 받아 수행하는 Server에 대한 Cluster Member ID를 반환하는 함수

 

gSQL> SELECT LOCAL_MEMBER_ID() FROM DUAL;

LOCAL_MEMBER_ID()

-----------------

1

 

- LOCAL_MEMBER_NAME

사용자 질의를 받아 수행하는 Server에 대한 Cluster Member Name을 반환하는 함수

 

gSQL> SELECT LOCAL_MEMBER_NAME() FROM DUAL;

LOCAL_MEMBER_NAME()

-------------------

G1N1

 

- ROWID_GRID_BLOCK_ID

GRID Block ID를 반환하는 함수

 

gSQL> SELECT C1, ROWID_GRID_BLOCK_ID( ROWID ) FROM T1;

C1 ROWID_GRID_BLOCK_ID( ROWID )

-- ----------------------------

1 52

2 52

3 52

 

 

- ROWID_GRID_BLOCK_SEQ

GRID Block Sequence를 반환하는 함수

 

gSQL> SELECT C1, ROWID_GRID_BLOCK_SEQ( ROWID ) FROM T1;

C1 ROWID_GRID_BLOCK_SEQ( ROWID )

-- -----------------------------

1 747465

2 747466

3 747467

 

GRID : global record id를 의미 하는데 global index에서 사용하기 위한 key를 말한다.

GRID 구조 : (memberid,member block id, member block sequence) 위와 같은 구조로 되어 있다.

 

위에서 ROWID_GRID_BLOCK_SEQ GRID에서 member lock sequence를 가져 올 때 사용한다.

 

- ROWID_MEMBER_ID

해당 Row에 대한 Member ID를 반환하는 함수

 

gSQL> SELECT C1, ROWID_MEMBER_ID( ROWID ) FROM T1;

C1 ROWID_MEMBER_ID( ROWID )

-- ------------------------

1 1

2 1

3 1

 

- ROWID_SHARD_ID

해당 Row에 대한 Shard ID를 반환하는 함수

 

gSQL> SELECT C1, ROWID_SHARD_ID( ROWID ) FROM T1;

C1 ROWID_SHARD_ID( ROWID )

-- -----------------------

1 0

2 1

3 2

 

- SHARD_GROUP_ID

[구문]

SHARD_GROUP_ID( table_name, shard_key_value [, ... ] )

 

[설명]

SHARD_GROUP_ID 함수는 table_name에 Shard Strategy가 정의된 경우 shard_key_value 값을 저장할 수 있는

Shard를 관리하는 Group ID를 반환한다.

입력인자 table_name은 identifier로 기술하여야 하며, table_name에 해당하는 객체가 Base Table이 아니거나

Shard Strategy가 정의되지 않은 경우 에러가 발생한다.

입력인자 shard_key_value는 table_name에 정의된 Shard Strategy의 Shard Key Column 순으로 나열되어야 한

다. shard_key_value 개수와 Shard Key Column 개수가 불일치할 경우 에러가 발생한다.

 

--> row data가 어느 group에 속해 있는지를 확인 할 수 있다. (좋은 정보이다.)

 

gSQL> select t1.c1 , shard_group_id(t1,t1.c1) from t1;

 

C1 SHARD_GROUP_ID(T1,T1.C1)

-- ------------------------

90                        2

 1                        1

50                        1

30                        1

10                        1

 

- SHARD_ID

[구문]

SHARD_ID( table_name, shard_key_value [, ... ] )

 

[설명]

SHARD_ID 함수는 table_name에 Shard Strategy가 정의된 경우 shard_key_value 값을 저장할 수 있는

Shard에 대한 ID를 반환한다. 입력인자 table_name은 identifier로 기술하여야 하며, table_name에

해당하는 객체가 Base Table이 아니거나 Shard Strategy가 정의되지 않은 경우 에러가 발생한다.

입력인자 shard_key_value는 table_name에 정의된 Shard Strategy의 Shard Key Column 순으로 나열되어야

한다. shard_key_value 개수와 Shard Key Column 개수가 불일치할 경우 에러가 발생한다.

 

--> 해당 row data가 어떤 shard 규칙에 포함 되어 있는지 알 수 있다.

 

gSQL> select t1.c1, shard_id(t1,t1.c1) from t1;

 

C1 SHARD_ID(T1,T1.C1)

-- ------------------

90                 18

 1                  1

50                  2

30                  6

10                 10

 

 

- STATEMENT_VIEW_SCN_DCN

현재 STATEMENT의 VIEW SCN 의 DCN(Domain Change Number) 값을 얻는다.

 

gSQL> SELECT STATEMENT_VIEW_SCN_DCN() FROM dual;

STATEMENT_VIEW_SCN_DCN()

------------------------

658

 

--> domain scn를 볼 수 있따.

 

- STATEMENT_VIEW_SCN_GCN

현재 STATEMENT의 VIEW SCN 의 GCN(Global Change Number) 값을 얻는다.

 

STATEMENT_VIEW_SCN_GCN()

------------------------

17697

 

--> global scn을 볼 수 있다.

 

- STATEMENT_VIEW_SCN_LCN

현재 STATEMENT의 VIEW SCN 의 LCN(Local Change Number) 값을 얻는다.

 

gSQL> SELECT STATEMENT_VIEW_SCN_LCN() FROM dual;

STATEMENT_VIEW_SCN_LCN()

------------------------

17880

 

--> Local scn을 볼 수 있다.

 

 

[ cluster 성능 지연 시 체크 ]

[x$cluster_queue]

gSQL> select * from x$cluster_queue@local;

NAME               ID QUEUED FULL_COUNT WAIT_COUNT  TOTALQ

----------------- --- ------ ---------- ---------- -------

MASTER_IN           0      0          0          0       0

MASTER_OUT          0      0          0          0    9302

MASTER_OUT        100      0          0          0 1611319

MASTER_OUT        200      0          0          0 1481908

SYNC_IN             0      0          0          0       0

SYNC_IN             1      0          0          0       0

SYNC_IN           100      0          0          0       0

SYNC_IN           101      0          0          0       0

SYNC_IN           200      0          0          0       0

COMMIT_IN           0      0          0          0   39500

COMMIT_SLAVE_IN     0      0          0          0       0

COORDINATOR_IN      0      0          0          0   39500

URGENT_IN           0      0          0          0    3647

RECOVER_OUT         0      0          0          0       0

LOCATOR_AGENT_OUT   0      0          0          0       0

HEARTBEAT           0      0          0          0       0

- 평상시

MASTER_OUT ID 0 번인것만 TOTALQ가 증가

URGENT_IN TOTALQ가 증가

MASTER_OUT : Insert 처리 시 다른 group에 처리 할 것이 있으면 TOTALQ가 version에

             따라 1나 또는 2가 증가.

             commit 처시 시 다른 group에 commit 처리 할 것이 있으면 1증가.

MASTER_IN : insert 처리 시 cluster를 통해 다른 group에서 들어 오는 것이 있으면

            version에 따라 1 또는 2가 증가.

COMMIT_IN : commit 처리 시 외부 group에서 들어 오는 것이 있으면 totalq 1증가.

SYNC_IN : replica을 통하여 전송 받은 totalq(slave 쪽에서 증가)

위의 4가지 정보를 이용하여 실제 전송 되고 오가는 Transaction을 알 수 있다.

--> local Transaction 처리 시 증가 하지 않는다.

 

참고]

coordinator,commit cpu 100%를 사용하고 있을 때 정말 cpu가 모자르다면 WAITP_COUNT(누적치)로 계속 증가 하는지

를 확인 할 수 있고 QUEUE는 현재 쌓여 있는 값으로 현재 상황을 모니터링 할 때 사용 할 수 있다.

 

 

 

[x$cl_latency_stat]

select * from X$CL_LATENCY_STAT@local where TOTAL_LATENCY > 0;

gSQL> \desc X$CL_LATENCY_STAT

COLUMN_NAME         TYPE           IS_NULLABLE

------------------- -------------- -----------

SESSION_ID          NATIVE_INTEGER FALSE      

COMMAND_TYPE        NATIVE_INTEGER FALSE      

LOCAL_REQ_QUEUEING  NATIVE_INTEGER FALSE      

REQ_TRANSMISSION    NATIVE_INTEGER FALSE      

REMOTE_REQ_QUEUEING NATIVE_INTEGER FALSE      

REQ_PROCESSING      NATIVE_INTEGER FALSE      

REMOTE_RES_QUEUEING NATIVE_INTEGER FALSE      

RES_TRANSMISSION    NATIVE_INTEGER FALSE      

LOCAL_RES_QUEUEING  NATIVE_INTEGER FALSE      

TOTAL_LATENCY       NATIVE_INTEGER FALSE

--> cdispatcher에 패킷 전송 시간 확인

--> 전송 시간이 엄청 많네 (transmission 마이크로초) 요걸로 현재 네트워크에 문제가 있다고 판단할 수 있다.

 

[X$CONTROLFILE_CLUSTER_MEMBER]

gSQL> select * from X$CONTROLFILE_CLUSTER_MEMBER;

MEMBER_NAME IS_LOCAL_MEMBER GROUP_ID MEMBER_ID MEMBER_POSITION

----------- --------------- -------- --------- ---------------

G1N1        FALSE                  1         1               0

G2N1        TRUE                   2         2               1

G1N1        TRUE                   1         1               0

G2N1        FALSE                  2         2               1

4 rows selected.

gSQL> select * from X$CL_LATENCY_STAT@local where TOTAL_LATENCY > 0;

SESSION_ID COMMAND_TYPE REQ_QUEUEING1 REQ_TRANSMISSION REQ_QUEUEING2

---------- ------------ ------------- ---------------- -------------

REQ_PROCESSING RES_QUEUEING1 RES_TRANSMISSION RES_QUEUEING2 TOTAL_LATENCY

-------------- ------------- ---------------- ------------- -------------

         4            5             2               58            36

            23             1               58             7           186

         4            5            48              408            35

            23             1              408            29           953

         4            5             2              639            36

            25             1              639            28          1370

         4            5            50              152            35

            22             1              152            10           422

         4            5             2          1273983            40

            26             1          1273983            30       2548065

         4            5             1               77             7

--> 전송 시간이 엄청 많네 (transmission 마이크로초) 요걸로 현재 네트워크에 문제가 있다고 판단할 수 있다.

 

[X$CL_SYSTEM_INFO]

select * from X$CL_SYSTEM_INFO;

gSQL> select * from X$CL_SYSTEM_INFO;

NAME                 VALUE CATEGORY COMMENTS                                 

-------------------- ----- -------- -----------------------------------------

GLOBAL_COMMIT_COUNT      0        0 globally committed count                 

CM_BUFFER_MISS_COUNT     0        0 latch miss count on communication buffer

FAILOVER_ENV_ID         46        0 environment identifier of cluster monitor

GLOBAL_COMMIT_COUNT      0        0 globally committed count                 

CM_BUFFER_MISS_COUNT     0        0 latch miss count on communication buffer

FAILOVER_ENV_ID         46        0 environment identifier of cluster monitor

--> CM_BUFFER_MISS_COUNT : CM Buffer에 데이터를 넣기 위하여 spin lock try 하는데 이에 실패 시 count가

증가 한다. hash type이나 replica에서 전송 시 위의 값이 증가 한다면 성능이 지연 될 수 있다. 그리고

session이 여러개 한꺼번에 접속 시 증가 한다.

--> global commit 조회

 

[x$cluster_dispatcher]

select * from x$cluster_dispatcher;

 

 

<< Function 표 >>

- list find view

X$BUILTIN_FUNCTION

X$PSEUDO_FUNCTION

- example

select func_name from X$BUILTIN_FUNCTION@local where func_name like '%SHARD%';

- example

gSQL> select func_name from X$PSEUDO_FUNCTION@local;

FUNC_NAME          

-------------------

CURRVAL            

NEXTVAL            

ROWID              

CLUSTER_GROUP_ID   

CLUSTER_MEMBER_ID  

CLUSTER_GROUP_NAME

CLUSTER_MEMBER_NAME

ROWNUM

 

 

<< global transaction 관련 조회 >>

gSQL> select * from x$global_transaction@local;

gSQL> select * from x$global_lock_wait@local;

gSQL> select * from x$cluster_server@local;

gSQL> select * from x$session@local where program like '%peer%';

 

 

<< MEMBER NAME 조회 >>

gSQL> SELECT A.MEMBER_ID, (SELECT MEMBER_NAME FROM USER_GSI_PLACE@LOCAL WHERE MEMBER_ID = A.MEMBER_ID LIMIT 1) , PHYSICAL_CONNECTION FROM X$CLUSTER_MEMBER@LOCAL A;

 

MEMBER_ID (SELECT MEMBER_NAME FROM USER_GSI_PLACE@LOCAL WHERE MEMBER_ID = A.MEMBER_ID LIMIT 1) PHYSICAL_CONNECTION

--------- ------------------------------------------------------------------------------------ -------------------

        1 G1N1                                                                                 INACTIVE           

        2 G1N2                                                                                 ACTIVE             

        3 G2N1                                                                                 ACTIVE             

        4 G2N2                                                                                 ACTIVE             

 

4 rows selected.

 

<< v$tablespace_stat >>

tablespace 통계 정보를 보여 준다.

 

gSQL> select * from v$tablespace_stat;

 

TBS_NAME       TBS_ID TOTAL_EXT_COUNT USED_META_EXT_COUNT USED_DATA_EXT_COUNT FREE_EXT_COUNT EXTENT_SIZE

-------------- ------ --------------- ------------------- ------------------- -------------- -----------

DICTIONARY_TBS      0            8191                   1                1722           6468       65536

MEM_UNDO_TBS        1           16383                   1                 258          16124       65536

MEM_DATA_TBS        2           20479                   1                1526          18952      262144

MEM_TEMP_TBS        3            8191                   1                1436           6754      262144

DISK_DATA_TBS       4             799                   1                   0            798      262144

MEM_AUX_TBS         5             799                   1                  12            786      262144

MEM_TRANS_TBS       6               1                   1                   0              0      262144

 

참고 : MEM_TRANS_TBS global transaciton 상태를 저장할 때 사용 하는 것으로 실제 user 단에서 사용 하는 것은

아니며  FREE_EXT_COUNT 0인것은 신경 쓰지 마라 정상 이다.

(10240 * member 수)

 

'sunjesoft > Goldilocks Cluster' 카테고리의 다른 글

Goldilocks Cluster Install 가이드  (0) 2021.08.17
Goldilocks Cluster 운영 가이드  (0) 2021.08.17