보통 분석 시스템에서 항상 나오는 이야기가 배치는 빠른데, 일반 조회성 쿼리의 성능을 맞출 수 있느냐라는 질문을 많이 받습니다.
전사에서 보는 일별 현황이 있고, 배치도 수행하고, 머신러링 형태로 분석하는 것이 동시에 수행될 때 어느 업무가 중요할까요?
대부분 90% 이상은 전사 일별 현황이 가장 중요하죠. 이는 다수의 사람보는 리포트는 상대적으로 가벼운 쿼리가 대부분이고, 또 빠른 응답을 원합니다. 이에 반면에 배치 처리와 머신러닝 등과 같은 작업은 많은 리소스를 사용하게 되죠. 그리고 오랫동안 수행되는 경향이 있습니다.
이러한 고객의 다양한 요구사항을 맞추기 위해서 Greenplum에서는 Rescoue Group라는 워크로드 매니저를 지원하고 있습니다.
리소스 제한 테스트한 결과는 아래와 같습니다.
1. PL/R 수행시 리소스 관리 기능 예시
1) SQL
* 머신러링 PL/R SQL
[gpadmin@mdw rgtest]$ cat plr.sql
select (dw.sp_plr_predict(id, category, attb01_arr, attb02_arr, attb03_arr) ).*
from dw.tb_user_data p ;
[gpadmin@mdw rgtest]$
* 일반 SQL
[gpadmin@mdw rgtest]$ cat query.sql
select count(*) from abalone a, abalone b, abalone c;
[gpadmin@mdw rgtest]$
2) 수행
- 쿼리 동시 수행
* PL/R 쿼리 수행
[gpadmin@mdw rgtest]$ psql -U udba -ef plr.sql -d gpadmin &
[gpadmin@mdw rgtest]$ Timing is on.
select (dw.sp_plr_predict(id, category, attb01_arr, attb02_arr, attb03_arr) ).*
from dw.tb_user_data p ;
* 일반 SQL 수행
[gpadmin@mdw rgtest]$ psql -U gpadmin -ef query.sql gpadmin &
select count(*) from abalone a, abalone b, abalone c;
[gpadmin@mdw rgtest]$
2. 리소스 사용율 비교
1) Default 사용시
* Top 프로세스 확인(세그먼트 노드의 CPU 확인)
top - 16:10:27 up 1 day, 11:29, 2 users, load average: 2.46, 0.67, 0.27
Tasks: 182 total, 8 running, 174 sleeping, 0 stopped, 0 zombie
%Cpu(s): 80.7 us, 11.4 sy, 0.0 ni, 7.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 445608 free, 504276 used, 917140 buff/cache
KiB Swap: 2097148 total, 2050164 free, 46984 used. 679600 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
37956 gpadmin 20 0 637840 14108 10376 R 22.8 0.8 0:08.32 postgres: 6000, gpadmin gpadmin 172.16.25.141(19982) c+ ===> 일반 쿼리
37957 gpadmin 20 0 637840 14108 10384 R 22.8 0.8 0:08.32 postgres: 6001, gpadmin gpadmin 172.16.25.141(36046) c+ ===> 일반 쿼리
37981 gpadmin 20 0 1045332 196760 22724 R 22.8 10.5 0:09.32 postgres: 6001, udba gpadmin 172.16.25.141(36080) con8+ ===> PLR 쿼리
37980 gpadmin 20 0 1045300 195480 22644 R 22.4 10.5 0:09.32 postgres: 6000, udba gpadmin 172.16.25.141(20016) con8+ ===> PLR 쿼리
737 root 20 0 305148 1988 1500 S 0.3 0.1 1:24.78 /usr/bin/vmtoolsd
37984 gpadmin 20 0 637620 10872 7160 R 0.3 0.6 0:00.02 postgres: 6000, udba gpadmin 172.16.25.141(20024) con8+
37985 gpadmin 20 0 637620 10864 7160 R 0.3 0.6 0:00.03 postgres: 6001, udba gpadmin 172.16.25.141(36088) con8+
38070 root 20 0 145844 5280 4020 S 0.3 0.3 0:00.01 sshd: gpadmin [priv]
1 root 20 0 125272 2564 1568 S 0.0 0.1 0:59.37 /usr/lib/systemd/systemd --switched-root --system --des+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 0:08.49 [ksoftirqd/0]
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0]
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
9 root 20 0 0 0 0 S 0.0 0.0 0:35.59 [rcu_sched]
10 root rt 0 0 0 0 S 0.0 0.0 0:03.04 [watchdog/0]
* Resource Group의 상태 확인
[gpadmin@mdw rgtest]$ alias rgs
alias rgs='psql -c "SELECT * FROM gp_toolkit.gp_resgroup_status_per_segment order by rsgname, hostname;"'
[gpadmin@mdw rgtest]$ rgs
rsgname | groupid | hostname | segment_id | cpu | memory_used
---------------+---------+----------+------------+-------+--------------
admin_group | 6438 | mdw | -1 | 0.52 | 6
admin_group | 6438 | sdw1 | 0 | 45.05 | 0
admin_group | 6438 | sdw1 | 1 | 44.34 | 0
admin_group | 6438 | sdw2 | 2 | 44.62 | 0
admin_group | 6438 | sdw2 | 3 | 43.71 | 0
rgudba | 32997 | sdw1 | 1 | 46.07 | 40
rgudba | 32997 | sdw1 | 0 | 45.44 | 40
rgudba | 32997 | sdw2 | 2 | 45.83 | 40
rgudba | 32997 | sdw2 | 3 | 46.52 | 40
2) Resource Group 설정 변경
gpadmin=# alter resource GROUP admin_group set CPU_RATE_LIMIT 30;
ALTER RESOURCE GROUP
Time: 70.391 ms
gpadmin=# alter resource GROUP rgudba set CPU_RATE_LIMIT 10;
ALTER RESOURCE GROUP
Time: 51.999 ms
gpadmin=#
3) Resource Group 설정 후 리소스 확인
* sdw1에서 top으로 확인
top - 16:12:11 up 1 day, 11:31, 2 users, load average: 5.22, 2.16, 0.85
Tasks: 178 total, 5 running, 173 sleeping, 0 stopped, 0 zombie
%Cpu(s): 88.4 us, 5.3 sy, 0.0 ni, 6.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 393688 free, 556336 used, 917000 buff/cache
KiB Swap: 2097148 total, 2050164 free, 46984 used. 627868 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
37957 gpadmin 20 0 637840 14108 10384 R 33.9 0.8 0:35.87 postgres: 6001, gpadmin gpadmin 172.16.25.141(36046) c+ ===> 일반 쿼리
37956 gpadmin 20 0 637840 14108 10376 R 33.6 0.8 0:35.86 postgres: 6000, gpadmin gpadmin 172.16.25.141(19982) c+ ===> 일반 쿼리
37980 gpadmin 20 0 1073064 222864 22648 R 11.3 11.9 0:27.70 postgres: 6000, udba gpadmin 172.16.25.141(20016) con8+ ===> PLR 쿼리
37981 gpadmin 20 0 1072940 229340 22728 R 11.3 12.3 0:27.71 postgres: 6001, udba gpadmin 172.16.25.141(36080) con8+ ===> PLR 쿼리
38004 gpadmin 20 0 157792 2376 1660 R 0.7 0.1 0:00.26 top
559 root 20 0 36880 1520 1356 S 0.3 0.1 1:00.36 /usr/lib/systemd/systemd-journald
7887 root 20 0 24252 1708 1396 S 0.3 0.1 0:04.43 /usr/lib/systemd/systemd-logind
1 root 20 0 125272 2564 1568 S 0.0 0.1 0:59.42 /usr/lib/systemd/systemd --switched-root --system --des+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 0:08.51 [ksoftirqd/0]
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H]
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0]
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
9 root 20 0 0 0 0 S 0.0 0.0 0:35.67 [rcu_sched]
10 root rt 0 0 0 0 S 0.0 0.0 0:03.04 [watchdog/0]
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kdevtmpfs]
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [netns]
14 root 20 0 0 0 0 S 0.0 0.0 0:00.05 [khungtaskd]
==> 머신러닝 쿼리( PL/R )를 호출 할 때에도 일반 유저로 실행할 수 있으며,
리소스 Group 에 셋팅된 값으로 시스템 리소스를 사용
* Resource Group의 상태 확인
[gpadmin@mdw rgtest]$ alias rgs
alias rgs='psql -c "SELECT * FROM gp_toolkit.gp_resgroup_status_per_segment order by rsgname, hostname;"'
[gpadmin@mdw rgtest]$ rgs
rsgname | groupid | hostname | segment_id | cpu | memory_used
---------------+---------+----------+------------+-------+--------------
admin_group | 6438 | mdw | -1 | 0.82 | 6
admin_group | 6438 | sdw1 | 0 | 66.97 | 0
admin_group | 6438 | sdw1 | 1 | 65.07 | 0
admin_group | 6438 | sdw2 | 2 | 67.04 | 0
admin_group | 6438 | sdw2 | 3 | 67.03 | 0
rgudba | 32997 | sdw1 | 1 | 22.14 | 56
rgudba | 32997 | sdw1 | 0 | 23.70 | 56
rgudba | 32997 | sdw2 | 2 | 22.88 | 64
rgudba | 32997 | sdw2 | 3 | 22.88 | 64
(25 rows)
[gpadmin@mdw rgtest]$
3. 리스스 그룹 설정을 위한 환경
1) OS 버전
- RHEL 7.x 또는 RHEL 6.X (kernel version 2.6.32-696 or higher)
- 참고 자료: https://gpdb.docs.pivotal.io/6-4/admin_guide/workload_mgmt_resgroups.html
2) Resource Group 설정을 위한 OS 설정
### OS 설정 및 cgroup 라이브러리 설치
# mkdir -p /etc/cgconfig.d
# vi /etc/cgconfig.d/gpdb.conf
group gpdb {
perm {
task {
uid = gpadmin;
gid = gpadmin;
}
admin {
uid = gpadmin;
gid = gpadmin;
}
}
cpu {
}
cpuacct {
}
memory {
}
cpuset {
}
}
# yum install libcgroup-tools
# cgconfigparser -l /etc/cgconfig.d/gpdb.conf
### 설정 확인
# grep cgroup /proc/mounts
### 경로 확인
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
### 각 항목별 경로 확인 및 gpadmin:gpadmin 권한 확인
# ls -la /sys/fs/cgroup/cpu/gpdb
# ls -la /sys/fs/cgroup/cpuacct/gpdb
# ls -la /sys/fs/cgroup/cpuset/gpdb
# ls -la /sys/fs/cgroup/memory/gpdb
### 시스템 자동 설정 (서비스 등록)
# systemctl enable cgconfig.service
# chkconfig cgconfig on
3) Resource 설정을 위한 DB 설정
### Resource Queue 모드에서 Resource Group으로 변경
$ gpconfig -s gp_resource_manager
Values on all segments are consistent
GUC: gp_resource_manager
Master value: queue
Segment value: queue
## group으로 설정 변경
$ gpconfig -c gp_resource_manager -v group
$ gpstop -af
$ gpstart -a
$ gpconfig -s gp_resource_manager
Values on all segments are consistent
GUC : gp_resource_manager
Master value: group
Segment value: group
$
### Resource Group 생성
- CPU_RATE_LIMIT 및 MEMORY_LIMIT는 세그먼트 호스트의 총 합의 비율을 사용 함.
- Memory_limit 의 합이 100% 를 넘을 수 없음.
### RG 생성 구문
CREATE RESOURCE GROUP name WITH (group_attribute=value [, ... ])
where group_attribute is:
CPU_RATE_LIMIT=integer | CPUSET=tuple
MEMORY_LIMIT=integer
[ CONCURRENCY=integer ]
[ MEMORY_SHARED_QUOTA=integer ]
[ MEMORY_SPILL_RATIO=integer ]
[ MEMORY_AUDITOR= {vmtracker | cgroup} ]
### RG 생성
CREATE RESOURCE GROUP rgoltp WITH (CPU_RATE_LIMIT=30,MEMORY_LIMIT=30);
CREATE RESOURCE GROUP rgadhoc WITH (CPU_RATE_LIMIT=30,MEMORY_LIMIT=30);
CREATE RESOURCE GROUP rgbatch WITH (CPU_RATE_LIMIT=30,MEMORY_LIMIT=30);
CREATE RESOURCE GROUP rgroup_extcomp WITH (MEMORY_AUDITOR=cgroup, CONCURRENCY=0, CPUSET='1', MEMORY_LIMIT=10);
### RG 변경
--한번에 여러 개를 바꿀 수 없으며, 각각의 항목에 대해서 변경 가능
ALTER RESOURCE GROUP name SET group_attribute value
where group_attribute is one of:
CONCURRENCY integer
CPU_RATE_LIMIT integer
CPUSET tuple
MEMORY_LIMIT integer
MEMORY_SHARED_QUOTA integer
MEMORY_SPILL_RATIO integer
ALTER RESOURCE GROUP rgoltp SET CONCURRENCY 7;
ALTER RESOURCE GROUP rgadhoc SET MEMORY_LIMIT 25;
ALTER RESOURCE GROUP rgbatch SET CPUSET '2,4';
### RG 삭제
DROP RESOURCE rgoltp exec;
### RG 할당
ALTER ROLE uoltp RESOURCE GROUP rgoltp;
CREATE ROLE uoltp RESOURCE GROUP rgoltp;
### RG Default 전환
ALTER ROLE uoltp RESOURCE GROUP NONE;
### RG 리소스 그룹 할당 확인
SELECT rolname, rsgname FROM pg_roles, pg_resgroup
WHERE pg_roles.rolresgroup=pg_resgroup.oid;
### RG 설정 확인
SELECT * FROM gp_toolkit.gp_resgroup_config;
## RQ 리소스 사용량 확인
SELECT * FROM gp_toolkit.gp_resgroup_status;
##RG 롤 설정 확인
SELECT rolname, rsgname FROM pg_roles, pg_resgroup
WHERE pg_roles.rolresgroup=pg_resgroup.oid;
Merkur 500c Progress - Deccasino
답글삭제Merkur 500c choegocasino Progress. หาเงินออนไลน์ The Merkur 500 was a high-performance safety razor for beginners, a high-performance razor, and an extremely fast- deccasino