Postgresql

PostgreSQL architecture (Local Memory)

dbavayne 2024. 11. 13. 16:26

 

 

Local Memory 

 세션별로 독립적인 메모리 공간

ㄴ 작업 유형에 따라 동적 할당

ㄴ 성능 최적화 고려사항

 

  • 큰 정렬 작업이 많은 경우 work_mem 증가
  • 대규모 vacuum 작업 시 maintenance_work_mem 조정

- maintenance_work_mem: VACUUM, INDEX 생성, 테이블 변경, FK추가 등 관리 작업에 사용

- work_mem: 정렬, 해시 테이블 등의 작업에 사용
- temp_buffers: 임시 테이블을 위한 버퍼

- catalog_cache: system catalog 메타데이터 사용공간

 

-- 현재 세션의 메모리 사용량 확인
SELECT * FROM pg_stat_activity 
WHERE pid = pg_backend_pid();

 

[TEST] 동시접속자 10명이 트랜잭션 1000개 사용시  vmstat 메모리 확인

 

1. 10개의 client 가 접속, thread 4개

2. free 메모리 줄어드는것 확인

 

3. local 로 된 프로세스 확인 


프로세스

데몬 프로세스 : postgresql.conf, pg_hba.conf

wal writer 실습

pgbench -h localhost -p 5432 -U postgres -i -s 30 pgbenchtest

wal file이 로테이션 돌면서 write 되었음.

 

iotop 으로 walwriter가 실행중인것 확인

 

 


 

postgresql 은 database와 schema가 나뉘어져있고 아래 구성대로 생성한다.

 

--DB생성
create database hr;

--user 생성
create user hr with password 'hr' superuser;

--db owner 변경
alter database hr owner to hr;

--스키마생성
create schema hr;

--권한부여
grant usage on schema hr to hr;

--테이블생성
CREATE TABLE dept (
dept_no INT PRIMARY KEY,
dept_name VARCHAR(100) NOT NULL,
dept_loc VARCHAR(100)
);
 
CREATE TABLE emp (
emp_no INT PRIMARY KEY,
emp_name VARCHAR(100) NOT NULL,
job VARCHAR(50),
manager INT,
start_date DATE,
salary NUMERIC(10, 2),
dept_no INT,
FOREIGN KEY (dept_no) REFERENCES hr.dept(dept_no),
FOREIGN KEY (manager) REFERENCES hr.emp(emp_no)
);

--데이터생성
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (1,'Administration',1700);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (2,'Marketing',1800);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (3,'Purchasing',1700);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (4,'Human Resources',2400);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (5,'Shipping',1500);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (6,'IT',1400);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (7,'Public Relations',2700);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (8,'Sales',2500);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (9,'Executive',1700);
INSERT INTO dept(dept_no,dept_name,dept_loc) VALUES (10,'Finance',1700);

INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (100, 'Steven King', 'Job Title 4',
NULL, '1987-06-17', 24000.00, 9);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (101, 'Neena Kochhar', 'Job Title 5', 100,
'1989-09-21', 17000.00, 9);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (102, 'Lex De Haan', 'Job Title 5', 100,
'1993-01-13', 17000.00, 9);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (103, 'Alexander Hunold', 'Job Title 9',
102, '1990-01-03', 9000.00, 6);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (104, 'Bruce Ernst', 'Job Title 9', 103,
'1991-05-21', 6000.00, 6);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (105, 'David Austin', 'Job Title 9', 103,
'1997-06-25', 4800.00, 6);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (106, 'Valli Pataballa', 'Job Title 9',
103, '1998-02-05', 4800.00, 6);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (107, 'Diana Lorentz', 'Job Title 9', 103,
'1999-02-07', 4200.00, 6);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (108, 'Nancy Greenberg', 'Job Title 7',
101, '1994-08-17', 12000.00, 10);
INSERT INTO emp(emp_no, emp_name, job, manager, start_date, salary, dept_no) VALUES (109, 'Daniel Faviet', 'Job Title 6', 108,
'1994-08-16', 9000.00, 10);

--뷰생성
CREATE VIEW emp_v AS SELECT d.dept_name, e.emp_no, e.emp_name, e.job, e.manager FROM dept d JOIN emp e ON d.dept_no =
e.dept_no;