database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 10540 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 10540
pg_aios 뷰
작성자
김상기(ioseph)
작성일
2025-09-18 18:01ⓒ
2025-09-19 10:29ⓜ
조회수
669
pg_aios
pid 해당 pid (vacuum worker, client backend, ...)
io_id io 핸들러번호
io_generation 해당 io 핸들러의 generation(?)
state
  • HANDED_OUT, 코드에서 참조되었지만, 사용 사용 안됨

  • DEFINED, 실행을 위한 information necessary가 정의됨

  • STAGED, 실행 준비

  • SUBMITTED, 실행

  • COMPLETED_IO, 끝났지만, 결과 처리가 끝나지 않음

  • COMPLETED_SHARED, 공동 마침 처리 완료

  • COMPLETED_LOCAL, 백엔드 로컬 마침 처리 완료

operation
  • invalid, 아직 모름

  • readv, 벡터화된 읽기

  • writev, 벡터화된 쓰기

off io 작업 시작위치
length io 작업량
target io 작업 객체, smgr, 릴레이션 io
handle_data_len io 작업 관련 데이터 길이. 또는, shared_buffers 및 temp_buffers의 io인 경우는 버퍼수
raw_result 저수준 작업 결과, null 이면 진행중
result
  • UNKNOWN 작업결과를 아직 알 수 없음

  • OK 작업 완료, 성공

  • PARTIAL 부분 작업 완료. 작업을 나눠 할 경우 나타남

  • WARNING 작업 중 경고 발생, 예, zero_damaged_pages = on 상태인데, 깨진 블록을 처리할 때 나타남

  • ERROR 작업 실패

target_desc blocks 18632..18647 in file "base/5/16384" (작업 대상)
f_sync sync 했는지?
f_localmem 로컬 메모리 처리했는지?
f_buffered 버퍼링 된 io 작업인지?


db에서 io 작업이 일어나면, 
postgres=# select pid,state,operation,target,handle_data_len,result,target_desc from pg_get_aios();

  pid  |   state   | operation | target | handle_data_len | result  |                target_desc
-------+-----------+-----------+--------+-----------------+---------+--------------------------------------------
 27172 | SUBMITTED | readv     | smgr   |               7 | UNKNOWN | blocks 27550..27556 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               2 | UNKNOWN | blocks 27563..27564 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               2 | UNKNOWN | blocks 27560..27561 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               3 | UNKNOWN | blocks 27539..27541 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               1 | UNKNOWN | block 27566 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               2 | UNKNOWN | blocks 27543..27544 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               1 | UNKNOWN | block 27570 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               5 | UNKNOWN | blocks 27576..27580 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               1 | UNKNOWN | block 27558 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               1 | UNKNOWN | block 27568 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               2 | UNKNOWN | blocks 27573..27574 in file "base/5/16384"
 27172 | SUBMITTED | readv     | smgr   |               3 | UNKNOWN | blocks 27546..27548 in file "base/5/16384"
(12개 행)
형태로 보입니다. (큰 테이블의 50% 가량 빈공간 확보 작업을 위한 autovacuum 때 벌어진 모습니다.)

기본설정(io_method = worker, postgres 에서 aio 처리용 백그라운드 프로세스를 따로 실행해서 처리하는 방법)에서는 
평균 읽기 속도: 324.649 MB/s, 평균 쓰기 속도: 334.911 MB/s

io_method = io_uring, uring 라이브러리를 이용해서 커널 시스템 콜을 백엔드 프로세스가 직접 호출하는 방법에서는
평균 읽기 속도: 337.129 MB/s, 평균 쓰기 속도: 351.133 MB/s

이런식으로 어떨 때, worker 모드가 어떨 때 io_uring 모드가 더 빠르게 처리합니다. 왔다 갔다하네요.
물론 단독으로 io를 100% 백엔드 프로세스가 다 쓰는 상황인 경우는
io_method = sync (기존 처리 방식) 일 때가 당연히 가장 빠릅니다. 
평균 읽기 속도: 391.735 MB/s, 평균 쓰기 속도: 414.830 MB/s

이번 이 비동기식 입출력 기능은 다중 사용자 환경에서 디스크 읽기/쓰기 병목 현상이 심한 환경에서 비교를 해 보아야 
새 기능 도입의 변화를 체감할 수 있을 것 같습니다.
 
[Top]
No.
제목
작성자
작성일
조회
10542잠시 참조키 검사 중지 하기 (18버전) [1]
김상기
2025-09-23
636
10540pg_aios 뷰
김상기
2025-09-18
669
10539psql restrict 모드
김상기
2025-09-16
523
10414EXCLUDE 제약 조건
김상기
2023-04-15
2279
9299plpgsql debuger 설치해서 사용하기
김상기
2013-06-19
9424
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v18.1로 자료를 관리합니다