티스토리 뷰

반응형

9월 중순쯤 Informix의 베타 테스트에 지원했었는데, 이런저런 사정이 있었는지 12월 8일에 첫번째 베타가 출시되었습니다. 정식 제품은 2024년 2월에 공개된다고 하는데 과연 어떨까요?

 

게으른 탓에 오늘에서야 설치를 겨우 했습니다. 기본 옵션으로 설치하면 기존의 과정과 크게 달라진 것은 없었습니다.

설치 파일과 동봉된 문서에 새로운 기능과 알려진 문제점들이 나와 있었는데, 가장 흥미로건 실행중인 쿼리의 플랜을 확인하는 기능이었습니다.

 

onstat -g qplan

IBM Informix Dynamic Server Version 15.0.FC0TL -- On-Line -- Up 01:41:59 -- 241176 Kbytes
2023-12-13 11:01:43 -- Infrastructure Version: 1

Session [101]: No running query to generate the plan.

Session [100]
QUERY:
------
select * from systables a, syscolumns b


QUERY: (OPTIMIZATION TIMESTAMP: 12-13-2023 11:01:43)Estimated Cost: 46231
Estimated # of Rows Returned: 873238

  1) informix.a: SEQUENTIAL SCAN

  2) informix.b: SEQUENTIAL SCAN
NESTED LOOP JOIN



Session [42]: No running query to generate the plan.

Session [41]: No running query to generate the plan.

Session [40]: No running query to generate the plan.

Session [39]: No running query to generate the plan.

Session [8]: No running query to generate the plan.

Session [7]: No running query to generate the plan.

Session [5]: No running query to generate the plan.

Session [4]: No running query to generate the plan.

Session [3]: No running query to generate the plan.

Session [2]: No running query to generate the plan.

위와 같이 onstat 명령을 qplan 옵션만으로 실행하면, 모든 세션 대상으로 실행중인 쿼리의 플랜이 보입니다.

문서에 따르면 sysmaster:syssqexplain 테이블의 sqx_sqlstatementplan 컬럼에서도 동일한 정보가 제공된다고 합니다.

해당 컬럼은 16,000자까지 저장되며 그 이상의 길이는 잘립니다.

그리고 각 단계별로 소요된 시간 정보까지는 표시되지 않습니다.

$ echo "select * from syssqexplain where sqx_sessionid = 102" | dbaccess sysmaster

Database selected.




sqx_sessionid       102
sqx_sdbno           0
sqx_iscurrent       Y
sqx_executions      0
sqx_cumtime         0.00
sqx_bufreads        0
sqx_pagereads       0
sqx_bufwrites       0
sqx_pagewrites      0
sqx_totsorts        0
sqx_dsksorts        0
sqx_sortspmax       -1
sqx_conbno          0
sqx_ismain          Y
sqx_selflag         SQ_SELECT
sqx_estcost         46231
sqx_estrows         873238
sqx_seqscan         2
sqx_srtscan         0
sqx_autoindex       0
sqx_index           0
sqx_remsql          0
sqx_mrgjoin         0
sqx_dynhashjoin     0
sqx_keyonly         0
sqx_tempfile        0
sqx_tempview        0
sqx_secthreads      0
sqx_sqlstatement    select * from systables a, syscolumns b
sqx_sqlstatementp+
                    QUERY: (OPTIMIZATION TIMESTAMP: 12-13-2023 13:25:31)Estimated Cost: 46231
                    Estimated # of Rows Returned: 873238

                      1) informix.a: SEQUENTIAL SCAN

                      2) informix.b: SEQUENTIAL SCAN
                    NESTED LOOP JOIN


1 row(s) retrieved.



Database closed.

 

세션별 쿼리 플랜에서 어떤 스캔 방식이 사용되었는지 횟수도 표시할 수 있네요.

히든 파라미터의 옵션을 바꾸면 카운터가 작동하는데 정식버전에서는 어떨지 모르겠네요.

풀스캔이 일어나는 쿼리를 찾는 등의 방식으로 활용할 수 있을 것 같습니다.

$ onmode -wf SQL_DEF_CTRL2=0x1
$ echo "select * from syssqexplain where sqx_sessionid = 117" | dbaccess sysmaster

Database selected.




sqx_sessionid       117
sqx_sdbno           0
sqx_iscurrent       Y
sqx_executions      0
sqx_cumtime         0.00
sqx_bufreads        0
sqx_pagereads       0
sqx_bufwrites       0
sqx_pagewrites      0
sqx_totsorts        0
sqx_dsksorts        0
sqx_sortspmax       -1
sqx_conbno          0
sqx_ismain          Y
sqx_selflag         SQ_SELECT
sqx_estcost         915
sqx_estrows         1480
sqx_seqscan         1
sqx_srtscan         0
sqx_autoindex       0
sqx_index           1
sqx_remsql          0
sqx_mrgjoin         0
sqx_dynhashjoin     0
sqx_keyonly         2
sqx_tempfile        1
sqx_tempview        0
sqx_secthreads      0
sqx_sqlstatement    select * from systabnames a, sysptnhdr b where b.partnum > 100000 order by 1,2,3
sqx_sqlstatementp+
                    QUERY: (OPTIMIZATION TIMESTAMP: 12-13-2023 13:33:41)Estimated Cost: 915
                    Estimated # of Rows Returned: 1480
                    Temporary Files Required For: Order By

                      1) informix.a: SEQUENTIAL SCAN

                      2) informix.b: INDEX PATH

                        (1) Index Name: informix.sysptnhdridx
                            Index Keys: partnum
                            Lower Index Filter: informix.b.partnum > 100000
                    NESTED LOOP JOIN


1 row(s) retrieved.

 

실시간 모니터링 기능이 향상되어 당장 문제가 되는 쿼리를 찾기가 수월해질 것으로 보입니다.

 

15버전의 새로운 기능들이 제법 있을 것 같은데, 어떤 유용한 기능이 생겼는지 살펴봐야겠습니다.

반응형
댓글