4. 기동 · 확인 · 정지

이 장을 마치면: GritDB를 띄우고, 정상인지 판정하고, 첫 테이블을 등록해 보고, 내린다.

소요: 30분 | 선행: 3장

4.1 기동

~/gritdb1/bin/gritdb-start

예상 출력:

============================================================================
GritDB Start (installed at /home/gritdb/gritdb1)
============================================================================
[INFO] Starting GritAdmin...
============================================================================
GritDB started successfully!
============================================================================
[INFO] GritAdmin: running (PID: <PID>)

Instance ID:         <인스턴스 ID>
PG port:             5432 (from postgresql.conf)
Log directory:       /home/gritdb/gritdb1/log
PostgreSQL connect:  /home/gritdb/gritdb1/bin/psql -p 5432 -d postgres
Stop:                /home/gritdb/gritdb1/bin/gritdb-stop
============================================================================

4.2 접속 준비 확인

started successfully는 GritDB가 접속을 받을 준비를 마쳤다는 뜻이다. 아래 명령으로 한 번 더 확인한다.

~/gritdb1/bin/pg_isready -p 5432

예상 출력:

/tmp:5432 - accepting connections

rejecting connections나 no response가 나오면 5초 뒤 다시 실행한다. 1분이 지나도 같으면 GDB-BOOT-005를 본다.

4.3 정상 판정

세 가지가 모두 맞으면 정상이다.

  1. 프로세스 4개가 떠 있다.

    ps -o pid,comm -p "$(cut -d: -f2 ~/gritdb1/run/grit_admin.pid | paste -sd,)"
    

    예상 출력(머리줄과 4줄, 순서 무관):

        PID COMMAND
      <PID> GritAdmin
      <PID> postgres
      <PID> GritCatalog
      <PID> GritSurfer
    
  2. gritsurfer가 미리 적재됐다.

    ~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SHOW shared_preload_libraries;"
    

    예상 출력:

    gritsurfer
    
  3. gritsurfer 확장이 설치됐다.

    ~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SELECT extname FROM pg_extension WHERE extname = 'gritsurfer';"
    

    예상 출력:

    gritsurfer
    

4.4 첫 테이블 등록해 보기

GritDB는 등록한 테이블만 관리한다. 등록 조건은 테이블의 REPLICA IDENTITY FULL 설정이다.

~/gritdb1/bin/psql -p 5432 -d postgres

psql 안에서 실행한다.

CREATE TABLE public.quickstart_check (id integer PRIMARY KEY, memo text);
ALTER TABLE public.quickstart_check REPLICA IDENTITY FULL;
SELECT register_gritsurfer_table('public', 'quickstart_check');
INSERT INTO public.quickstart_check VALUES (1, 'hello'), (2, 'gritdb');
SELECT * FROM public.quickstart_check ORDER BY id;
SELECT table_name FROM get_gritsurfer_tables() WHERE table_name = 'quickstart_check';

예상 출력:

CREATE TABLE
ALTER TABLE
 register_gritsurfer_table
---------------------------

(1 row)

INSERT 0 2
 id |  memo
----+--------
  1 | hello
  2 | gritdb
(2 rows)

    table_name
------------------
 quickstart_check
(1 row)
  • register_gritsurfer_table은 돌려주는 값이 없으므로 빈 줄 1행이 나오면 정상이다.
  • 등록하거나 해제할 때 INFO: GritSurfer: …와 NOTICE: GritSurfer: … 줄이 함께 보인다. 이 줄은 등록과 해제 기록이며 정상이다.
  • 마지막 조회에 quickstart_check가 보이면 등록이 완료됐다.
  • REPLICA IDENTITY FULL을 빼면 등록이 거부된다(GDB-RUNTIME-001).

점검용 테이블을 정리한다. 등록을 먼저 해제한 뒤 테이블을 삭제한다.

SELECT unregister_gritsurfer_table('public', 'quickstart_check');
DROP TABLE public.quickstart_check;
\q

예상 출력:

 unregister_gritsurfer_table
-----------------------------

(1 row)

DROP TABLE

4.5 정지

~/gritdb1/bin/gritdb-stop

예상 출력:

============================================================================
GritDB Stop (installed at /home/gritdb/gritdb1)
============================================================================
[INFO] GritAdmin is running (PID: <PID>)
[INFO] Sending: grit_admin_client stop
[INFO] Stop command accepted: OK stopped
[INFO] GritAdmin stopped
============================================================================
GritDB stopped.
============================================================================

정지를 확인한다. 아래 명령의 출력이 없으면 프로세스가 모두 내려갔다.

pgrep -u gritdb -l -x 'GritAdmin|GritSurfer|GritCatalog|postgres'
  • gritdb-stop은 정상 정지다. 열린 세션이 남아 있으면 즉시 정지로 넘어가고, 다음 기동 때 복구 과정을 거친다. 그래서 접속 중인 응용 프로그램을 먼저 끝낸다(GDB-SHUTDOWN-002).
  • gritdb-stop --quick은 즉시 정지다. 진행 중인 작업을 끊고, 다음 기동 때 복구 과정을 거친다. 급할 때만 쓴다. GritDB 엔진 core 파일(수십 GB)이 생길 수 있으니 디스크 여유를 본다.
  • ⚠ kill로 프로세스를 하나씩 죽이지 않는다(6장).

4.6 재시작

~/gritdb1/bin/gritdb-stop
~/gritdb1/bin/gritdb-start

문제가 생기면

더 알아보기

  • 기동 옵션, 즉시 정지, 크래시 후 재기동은 Admin 4장을 본다.
  • 테이블을 등록, 해제, 조회하는 함수 전체와 분석 세션은 Admin 6장을 본다. 분석 세션은 등록 테이블만 읽는 조회를 GritDB 엔진으로 보낸다.