Repository navigation
measure(replication): 반동기 미복귀 원인 분리 — 복구 절차 탓, SET PERSIST 로도 안 된다 #835
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
93 changes: 93 additions & 0 deletions
93
loadtest/results/replication-semisync-recovery-2026-11-07/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| # 반동기 미복귀 원인 분리 (2026-11-07, 로컬) | ||
|
|
||
| 설계: [`../../../docs/decisions/replication-lag-and-semisync.md`](../../../docs/decisions/replication-lag-and-semisync.md) §0-2 Q4 | ||
| 앞 라운드: [`../replication-2026-08-17/`](../replication-2026-08-17/) — `_out/Q4_semisync_degrade.txt` | ||
| 무대: 로컬 Docker · `mysql:8.0` = **8.0.46** 양쪽 · 소스 1 + 리플리카 1 · 포지션 기반(`gtid_mode=OFF`) · | ||
| `wait_point=AFTER_SYNC` · `timeout=10000ms` · `wait_for_replica_count=1` | ||
|
|
||
| ## 0. 한 줄 | ||
|
|
||
| **08-17 의 «리플리카가 돌아와도 반동기로 안 돌아온다» 는 MySQL 의 성질이 아니라 복구 절차 탓이었다.** | ||
| 그런데 원인이 하나가 아니었다 — 리플리카 쪽 설정을 `SET GLOBAL` 로 켜면 재기동에 사라지고, | ||
| `SET PERSIST` 로 살려둬도 **재기동 때 자동으로 붙는 수신 스레드가 반동기 없이 붙는다.** | ||
| 설정을 **시작 옵션**(`--plugin-load-add` + `--loose-rpl-semi-sync-replica-enabled=ON`)으로 주면 | ||
| 추가 조작 없이 1초 안에 돌아왔다. | ||
|
|
||
| ## 1. 질문 | ||
|
|
||
| 08-17 Q4 의 단서 — «자동 미복구가 rig 의 복구 절차(리플리카 재기동 후 `START REPLICA` 만) 탓인지 | ||
| 갈라내지 않았다» — 를 닫는다. 이진 사실이라 로컬 무대로 충분하다(처리량·지연은 안 잰다). | ||
|
|
||
| ## 2. 팔과 판 | ||
|
|
||
| | 팔 | 리플리카 반동기를 켜는 방법 | 재기동 뒤 복구 조작 | | ||
| |---|---|---| | ||
| | A | `SET GLOBAL` (08-17 rig 과 같음 — `replication_probe.sh:276`) | `START REPLICA` 만 (08-17 과 같음) | | ||
| | B | `SET GLOBAL` | `START REPLICA` → `SET GLOBAL ..._enabled=1` → IO 스레드 재시작 | | ||
| | C | `SET PERSIST` | `START REPLICA` 만 | | ||
| | D | 시작 옵션 (`docker-compose.armD.yml`) | `START REPLICA` 만 | | ||
|
|
||
| - A·B·C: 버림 1(A) + 본판 9, 라틴 방격(ABC·BCA·CAB) — 판 순서와 팔을 가른다. 판마다 | ||
| `RESET PERSIST` 로 앞 판의 영속 설정이 새지 않게 했다 | ||
| - D: 리플리카 시작 옵션이 달라 **같은 무대에서 섞을 수 없어 따로** 돌았다 — 버림 1 + 본판 3. | ||
| 🔴 그래서 D 는 A·B·C 와 판 순서가 균형 잡혀 있지 않다(결과가 4/4 로 갈려 판정엔 영향 없다고 본다) | ||
| - 판마다: 리플리카 `docker stop` → 소스에 3행 → `docker start` → **복구 조작 전에** 리플리카 | ||
| `@@rpl_semi_sync_replica_enabled` 를 찍음(원인 증거) → 팔별 복구 → 최대 20초 쓰며 소스 `status` 관찰 | ||
| - 판정 «복귀» = 소스 `status=ON` · `clients=1` · 복구 뒤 쓰기가 `yes_tx` 로 셈 | ||
|
|
||
| ## 3. 결과 | ||
|
|
||
| | 팔 | 판 | 재기동 직후 리플리카 `enabled` | 결과 | | ||
| |---|---:|---|---| | ||
| | A | 본판 3 + 버림 1 | **0** | **본판 3/3 미복귀** (버림 포함 4/4, `OFF`/0) — 08-17 재현 | | ||
| | B | 본판 3 | 0 → 수동으로 1 | **3/3 복귀**, 1초 | | ||
| | C | 본판 3 | **1** | **3/3 미복귀** (`OFF`/0) ← 예상 밖 | | ||
| | D | 본판 3 + 버림 1 | **1** | **본판 3/3 복귀** (버림 포함 4/4), 1초 | | ||
|
|
||
| 원본: `_out/trials.tsv`(A·B·C) · `_out_armD/trials.tsv`(D) · `_out*/D0_stage.txt`(무대) | ||
|
|
||
| 공통 관측(전체 관측 14판 = 본판 12 + 버림 2): 리플리카를 멈춘 뒤 **첫 쓰기 10,510~13,281ms** — 설정 timeout 10,000ms 를 | ||
| 그대로 문다(08-17 의 10,658ms 와 같은 결). 그 뒤 `status=OFF`, 에러 없이 통과. | ||
|
|
||
| ### 3-1. C 진단 — 설정은 켜져 있는데 왜 안 돌아오나 | ||
|
|
||
| C 한 판을 컨테이너를 남긴 채(`KEEP=1`) 돌려 확인했다 — `_diag/C_diagnosis.txt`. | ||
|
|
||
| - 재기동 뒤 리플리카 `@@rpl_semi_sync_replica_enabled=1` 인데 **`Rpl_semi_sync_replica_status=OFF`** | ||
| - 리플리카 로그: 수신 스레드가 재기동 시 **자동으로** 소스에 붙었다(12:20:12.553) — | ||
| `ready for connections`(12:20:12.604)보다 먼저 | ||
| - 설정은 건드리지 않고 **IO 스레드만 재시작** → 2초 뒤 소스 `ON`/1, 리플리카 `status=ON` | ||
|
|
||
| ⚠️ **추론(검증 안 함)**: 반동기 역할은 수신 스레드가 소스에 붙는 순간 정해지는데, C 는 그 순간에 | ||
| 영속 설정이 아직 반동기 쪽에 반영되지 않았던 것으로 보인다. D 는 플러그인과 설정을 시작 옵션으로 | ||
| 서버 기동 초기에 올려서 그 순서 문제가 없는 것으로 읽는다. 기동 순서를 직접 계측하진 않았다. | ||
|
|
||
| ### 3-2. D 의 부산물 — `loose-` 가 없으면 기동을 거부한다 | ||
|
|
||
| 1회차(`run_armD_fail1.log`)는 리플리카가 안 떴다. `mysql` 이미지의 첫 기동(`--initialize`)은 | ||
| `--plugin-load-add` 를 무시하는데, 그 상태에서 플러그인 변수를 만나 `unknown variable | ||
| 'rpl-semi-sync-replica-enabled=ON'` 으로 중단했다. 플러그인 변수는 `loose-` 접두사로 줘야 한다. | ||
|
|
||
| ## 4. 조건 — 인용할 때 떼면 안 되는 것 | ||
|
|
||
| 1. **로컬 · 같은 호스트 · 8.0.46** 의 이진 사실이다. 시간 값(1초·2초)은 폴링 간격이라 인용하지 않는다 | ||
| 2. 리플리카 **1대** · `wait_for_replica_count=1`. 리플리카 2대 이상에서 한 대가 죽는 경우는 안 봤다 | ||
| 3. 재기동은 `docker stop/start` 다 — 호스트 재부팅·OOM kill 등 다른 죽음은 안 봤다 | ||
| 4. 포지션 기반 복제다. GTID 켠 무대에서 같은지는 안 봤다 | ||
| 5. D 는 따로 돌아 A·B·C 와 판 순서 균형이 없다(§2) | ||
|
|
||
| ## 5. 운영으로 옮기면 (제안 — 이 프로젝트 운영엔 리플리카가 없다) | ||
|
|
||
| - 리플리카 반동기는 **시작 옵션/옵션 파일**로 켠다(`plugin-load-add` + `loose-...enabled=ON`). | ||
| `SET GLOBAL` 은 재기동에 사라지고, `SET PERSIST` 만으로는 이 무대에서 복귀하지 않았다 | ||
| - 그래도 재기동 뒤엔 **소스 `Rpl_semi_sync_source_status`·`clients` 를 확인**하고, 아니면 리플리카 | ||
| IO 스레드를 재시작한다. 알람은 `status=OFF` 와 `no_tx` 증가에 건다 — 이 실험의 A·C 는 에러 없이 | ||
| 비동기로 계속 돌았다 | ||
|
|
||
| ## 6. 재현 | ||
|
|
||
| ```bash | ||
| bash semisync_recovery.sh # A·B·C 10판 | ||
| OUT="$PWD/_out_armD" COMPOSE_OVERRIDE=docker-compose.armD.yml ORDER="D D D D" bash semisync_recovery.sh | ||
| OUT="$PWD/_diag" ORDER="C" KEEP=1 bash semisync_recovery.sh # C 진단 — 컨테이너 남김, 끝나면 compose down -v | ||
| ``` | ||
11 changes: 11 additions & 0 deletions
11
loadtest/results/replication-semisync-recovery-2026-11-07/_diag/C_diagnosis.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| # C 팔 진단 (2026-11-07, KEEP=1 로 C 한 판 뒤 컨테이너를 남겨 확인) | ||
| ## 재기동 뒤 (복구 조작 = START REPLICA 만) | ||
| source Rpl_semi_sync_source_status=OFF clients=0 | ||
| replica @@rpl_semi_sync_replica_enabled=1 Rpl_semi_sync_replica_status=OFF | ||
| replica 로그: 수신 스레드가 'ready for connections' 보다 먼저 소스에 붙었다 | ||
| 12:20:12.553701Z [MY-014001] Replica receiver thread ... connected to source ← 재기동 시 자동 시작 | ||
| 12:20:12.604736Z [MY-010931] mysqld: ready for connections | ||
| (12:21:37 의 MY-014001 은 아래 수동 IO 재시작) | ||
| ## STOP/START REPLICA IO_THREAD 만 (SET 없음) → 2초 뒤 | ||
| source status=ON clients=1 | ||
| replica Rpl_semi_sync_replica_status=ON |
17 changes: 17 additions & 0 deletions
17
loadtest/results/replication-semisync-recovery-2026-11-07/_diag/D0_stage.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # D0 — 무대 | ||
| # 생성: 2026-11-07T12:19:34Z UTC | ||
| source version 8.0.46 | ||
| source server_id 1 | ||
| source gtid_mode OFF | ||
| source binlog_format ROW | ||
| source sync_binlog 1 | ||
| source innodb_flush_log_at_trx_commit 1 | ||
| source rpl_semi_sync_source_enabled 1 | ||
| source rpl_semi_sync_source_timeout 10000 | ||
| source rpl_semi_sync_source_wait_point AFTER_SYNC | ||
| source rpl_semi_sync_source_wait_for_replica_count 1 | ||
| replica version 8.0.46 | ||
| replica server_id 2 | ||
| replica read_only 1 | ||
| source plugin rpl_semi_sync_source ACTIVE | ||
| replica plugin rpl_semi_sync_replica ACTIVE |
2 changes: 2 additions & 0 deletions
2
loadtest/results/replication-semisync-recovery-2026-11-07/_diag/trials.tsv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| trial kind arm pre_status/clients first_write_ms down_status no_tx rep_enabled_after_restart rep_plugin_after_restart io_running_after_restart on_after_s post_status/clients yes_tx_delta verdict pre_on_s | ||
| 1 버림 C ON/1 10574 OFF 2 1 ACTIVE Yes - OFF/0 0 미복귀 1 |
17 changes: 17 additions & 0 deletions
17
loadtest/results/replication-semisync-recovery-2026-11-07/_out/D0_stage.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # D0 — 무대 | ||
| # 생성: 2026-11-07T12:04:10Z UTC | ||
| source version 8.0.46 | ||
| source server_id 1 | ||
| source gtid_mode OFF | ||
| source binlog_format ROW | ||
| source sync_binlog 1 | ||
| source innodb_flush_log_at_trx_commit 1 | ||
| source rpl_semi_sync_source_enabled 1 | ||
| source rpl_semi_sync_source_timeout 10000 | ||
| source rpl_semi_sync_source_wait_point AFTER_SYNC | ||
| source rpl_semi_sync_source_wait_for_replica_count 1 | ||
| replica version 8.0.46 | ||
| replica server_id 2 | ||
| replica read_only 1 | ||
| source plugin rpl_semi_sync_source ACTIVE | ||
| replica plugin rpl_semi_sync_replica ACTIVE |
11 changes: 11 additions & 0 deletions
11
loadtest/results/replication-semisync-recovery-2026-11-07/_out/trials.tsv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| trial kind arm pre_status/clients first_write_ms down_status no_tx rep_enabled_after_restart rep_plugin_after_restart io_running_after_restart on_after_s post_status/clients yes_tx_delta verdict pre_on_s | ||
| 1 버림 A ON/1 10755 OFF 2 0 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 2 본판 A ON/1 11197 OFF 25 0 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 3 본판 B ON/1 10850 OFF 48 0 ACTIVE Yes 1 ON/1 2 복귀 1 | ||
| 4 본판 C ON/1 10904 OFF 50 1 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 5 본판 B ON/1 13281 OFF 73 0 ACTIVE Yes 1 ON/1 2 복귀 1 | ||
| 6 본판 C ON/1 10551 OFF 75 1 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 7 본판 A ON/1 10510 OFF 98 0 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 8 본판 C ON/1 12062 OFF 121 1 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 9 본판 A ON/1 11235 OFF 144 0 ACTIVE Yes - OFF/0 0 미복귀 1 | ||
| 10 본판 B ON/1 11475 OFF 167 0 ACTIVE Yes 1 ON/1 2 복귀 1 |
17 changes: 17 additions & 0 deletions
17
loadtest/results/replication-semisync-recovery-2026-11-07/_out_armD/D0_stage.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # D0 — 무대 | ||
| # 생성: 2026-11-07T12:32:20Z UTC | ||
| source version 8.0.46 | ||
| source server_id 1 | ||
| source gtid_mode OFF | ||
| source binlog_format ROW | ||
| source sync_binlog 1 | ||
| source innodb_flush_log_at_trx_commit 1 | ||
| source rpl_semi_sync_source_enabled 1 | ||
| source rpl_semi_sync_source_timeout 10000 | ||
| source rpl_semi_sync_source_wait_point AFTER_SYNC | ||
| source rpl_semi_sync_source_wait_for_replica_count 1 | ||
| replica version 8.0.46 | ||
| replica server_id 2 | ||
| replica read_only 1 | ||
| source plugin rpl_semi_sync_source ACTIVE | ||
| replica plugin rpl_semi_sync_replica ACTIVE |
5 changes: 5 additions & 0 deletions
5
loadtest/results/replication-semisync-recovery-2026-11-07/_out_armD/trials.tsv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| trial kind arm pre_status/clients first_write_ms down_status no_tx rep_enabled_after_restart rep_plugin_after_restart io_running_after_restart on_after_s post_status/clients yes_tx_delta verdict pre_on_s | ||
| 1 버림 D ON/1 11288 OFF 2 1 ACTIVE Yes 1 ON/1 2 복귀 1 | ||
| 2 본판 D ON/1 10752 OFF 4 1 ACTIVE Yes 1 ON/1 2 복귀 1 | ||
| 3 본판 D ON/1 11195 OFF 6 1 ACTIVE Yes 1 ON/1 2 복귀 1 | ||
| 4 본판 D ON/1 10798 OFF 8 1 ACTIVE Yes 1 ON/1 2 복귀 1 |
22 changes: 22 additions & 0 deletions
22
loadtest/results/replication-semisync-recovery-2026-11-07/docker-compose.armD.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # D 팔 — 리플리카 반동기를 «시작 옵션» 으로 켠다 (MySQL 문서가 권하는 방식 — 옵션 파일과 같은 효과) | ||
| # | ||
| # 기본 compose 위에 겹쳐 쓴다: docker compose -f docker-compose.yml -f docker-compose.armD.yml | ||
| # command 는 목록 전체가 교체되므로 기본 compose 의 replica 옵션을 그대로 옮기고 두 줄만 더한다. | ||
| # 컨테이너 설정이 달라 A·B·C 와 한 무대에서 섞어 돌릴 수 없다 — 그래서 D 는 따로 돈다. | ||
|
|
||
| services: | ||
| replica: | ||
| command: | ||
| - --server-id=2 | ||
| - --log-bin=binlog | ||
| - --binlog-format=ROW | ||
| - --gtid-mode=OFF | ||
| - --log-replica-updates=ON | ||
| - --enforce-gtid-consistency=OFF | ||
| - --innodb-flush-log-at-trx-commit=1 | ||
| - --sync-binlog=1 | ||
| - --read-only=ON | ||
| - --plugin-load-add=semisync_replica.so | ||
| # loose- = 모르는 변수면 무시. 이미지 첫 기동의 --initialize 는 플러그인을 안 올려서, | ||
| # 접두사 없이 쓰면 «unknown variable» 로 기동을 거부한다(1회차가 실제로 그랬다 — run_armD_fail1.log) | ||
| - --loose-rpl-semi-sync-replica-enabled=ON |
47 changes: 47 additions & 0 deletions
47
loadtest/results/replication-semisync-recovery-2026-11-07/docker-compose.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| # 반동기 미복귀 원인 분리 rig — 소스 1 + 리플리카 1 (로컬 전용) | ||
| # | ||
| # 08-17 rig(../replication-2026-08-17/docker-compose.yml)과 같은 설정이다. 바꾼 것은 | ||
| # 컨테이너·네트워크 이름뿐 — 이 저장소에 세션이 둘 이상 붙어 08-17 rig 이 같은 이름으로 | ||
| # 떠 있을 수 있어서 충돌을 피한다. | ||
| # | ||
| # 이 무대가 답하는 것은 «리플리카가 돌아왔을 때 반동기가 다시 붙는가» 라는 이진 사실뿐이다. | ||
| # 처리량·지연은 재지 않는다(같은 디스크·RTT ≈ 0). | ||
|
|
||
| services: | ||
| source: | ||
| image: mysql:8.0 | ||
| container_name: srec_source | ||
| command: | ||
| - --server-id=1 | ||
| - --log-bin=binlog | ||
| - --binlog-format=ROW | ||
| - --gtid-mode=OFF | ||
| - --log-replica-updates=ON | ||
| - --enforce-gtid-consistency=OFF | ||
| - --innodb-flush-log-at-trx-commit=1 | ||
| - --sync-binlog=1 | ||
| environment: | ||
| MYSQL_ROOT_PASSWORD: repl | ||
| MYSQL_DATABASE: replprobe | ||
| networks: [srec] | ||
|
|
||
| replica: | ||
| image: mysql:8.0 | ||
| container_name: srec_replica | ||
| command: | ||
| - --server-id=2 | ||
| - --log-bin=binlog | ||
| - --binlog-format=ROW | ||
| - --gtid-mode=OFF | ||
| - --log-replica-updates=ON | ||
| - --enforce-gtid-consistency=OFF | ||
| - --innodb-flush-log-at-trx-commit=1 | ||
| - --sync-binlog=1 | ||
| - --read-only=ON | ||
| environment: | ||
| MYSQL_ROOT_PASSWORD: repl | ||
| networks: [srec] | ||
|
|
||
| networks: | ||
| srec: | ||
| name: srec_net |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Script executed:
Repository: Shadowfit/init
Length of output: 22450
본판 결과와 버림판 결과를 분리해 주세요.
A와 D의
4/4에는 버림판이 포함됩니다. 본판 결과는 각각3/3입니다. 결정 문서에도 본판 수와 버림판을 구분해 표기해 주세요.14판은 전체 관측 수임을 명시해 주세요.