PostgreSQL 의 팁
11282 단어 PostgreSQL
(1)Oracle 과 유사 한 dblink 기능
Oacle 을 사용 한 사람 은 모두 알 고 있 습 니 다.Oacle 은 매우 선진 적 인 기능 을 가지 고 있 습 니 다.dblink 라 고 합 니 다.한 데이터베이스 에서 다른 원 격 데이터 베 이 스 를 조작 할 수 있 습 니 다.예 를 들 어 하나의 데이터 베 이 스 는 중국 베 이 징 에 있 고 다른 데이터 베 이 스 는 중국 상하 이에 있 습 니 다.저 는 베 이 징 이라는 데이터 베이스 위 에 상하 이 데이터 베 이 스 를 구축 할 수 있 습 니 다.그리고 베 이 징 이라는 데이터베이스 에서 상하 이의 데이터 베 이 스 를 query 또는 update 또는 delete 할 수 있 습 니 다.이 선진 적 인 기능 은 PostgreSQL 의 원래 코드 인 contrib\dblink 에 이미 있 습 니 다.여러분 은 이렇게 그 를 우리 의 데이터베이스 에 컴 파일 하고 설치 할 수 있 습 니 다.
#cd contrib
/
dblink
#make
#make install
우리 의 postgresql 이:/home/pgsql 에 설치 되 어 있다 고 가정 합 니 다.
make install 후/home/pgsql/lib/에 dblink.so 파일 이 있 습 니 다.이것 이 바로 dblink 를 사용 하 는 데 필요 한 함수 파일 입 니 다.또한,/home/pgsql/share/contrib 에 dblink.sql 파일 이 있 습 니 다.이것 이 dblink.so 를 설치 하 는 함수 에 필요 한 sql 문 입 니 다.
dblink 의 모든 함 수 를 이렇게 설치 할 수 있 습 니 다.
#cat dblink.sql
|
psql
[pgsql@webtrends contrib]$ cat dblink.sql
|
psql
CREATE FUNCTION
[pgsql@webtrends contrib]$
우리 의 함수 설치 가 성공 했다 는 것 을 설명 한다.
다음은 dblink 의 모든 선진 기능 을 사용 할 수 있 습 니 다.
여러분 은 먼저 dblink.sql 중의 일부 함수 설명 을 보고 우리 로 하여 금 그의 역할 을 더욱 잘 알 게 할 수 있 습 니 다.
다음은 psql 에 들 어 갑 니 다:
pgsql
=
# select dblink_connect(
'
host=localhost user=pgsql password=
'
);
dblink_connect
----------------
OK
(
1
row)
이 함 수 는 원 격 데이터 베 이 스 를 연결 하 는 데 사용 된다.
우 리 는 이렇게 원 격 데이터베이스 에 insert 기록 을 생각 할 수 있 습 니 다.
pgsql
=
# select dblink_exec(
'
insert into student values(\'linux_prog\',\'12345\')
'
);
dblink_exec
-------------------
INSERT
22516276
1
(
1
row)
지금 우 리 는 방금 insert 의 기록 을 검색 합 니 다.어 떻 습 니까?방금 insert 기록 이 들 어 있 습 니 다.
dblink 의 기능 은 매우 강하 다.내 가 위 에 열거 한 것 은 단지 그의 가장 간단 한 응용 일 뿐이다.PostgreSQL 의 source code 아래 를 참고 하 십시오.
contrib/dblink/sql/dblink.sql 자세히 보 세 요.
(2)시스템 에서 성능 이 매우 나 쁜 SQL 을 찾아내 고 최적화 시킨다.
우리 가 Oracle 시스템 관 리 를 할 때 자주 하 는 일 은:
먼저 시스템 에서 어떤 SQL 의 성능 이 가장 나 쁜 지 살 펴 보고 Liux 명령:top-c 를 통 해 이 맨 앞 에 있 는 Oacle 프로 세 스 의 PID 를 찾 은 다음 Oacle 에 관 한 view 를 찾 습 니 다.
이 SQL 을 찾 아서 이 SQL 의 execute plan 을 보고 관련 최 적 화 를 진행 합 니 다.
PostgreSQL 도 이런 선진 적 인 기능 을 제공 했다.
우선,postgresql.conf 에서 statscommand_string=true 를 열 어 PostgreSQL 의 stats collector process 가 모든 session 의 sql 문 구 를 감시 합 니 다.
관련 스 크 립 트 작성:
viewsql.sh:
#
!/
bin
/
sh
######################################################
# viewsql.sh #
# Author:linux_prog #
# use to show all active session
'
s sql in PostgreSQL.#
######################################################
if
test
-
z $
1
;then
echo
"
Usage:$0 pid
"
exit
10
fi
echo
"
select * from (SELECT pg_stat_get_backend_pid(s.backendid) AS
procpid, pg_stat_get_backend_activity(s.backendid) AS current_query FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS s) as querystring
where procpid=$1;
"
|
psql
이 스 크 립 트 는 지정 한 pid 의 session 이 현재 실행 중인 sql 문 구 를 표시 합 니 다.
예 를 들 면:
나 는 top-c 를 사용 했다.결 과 는:
3665 pgsql 15 0 124M 124M 122M R 30.0 2.1 0:04 postgres: pgsql pgsql [local] INSERT
볼 수 있 습 니 다:3665 이 pid 는 첫 번 째 조 에 나타 나 는데 이것 은 sql 의 효율 이 비교적 낮 을 수 있다 는 것 을 설명 합 니 다.
[pgsql@webtrends bin]$ .
/
viewsql.sh
3665
procpid
|
current_query
---------+---------------------------------------------------
3665
|
insert into access_log select
*
from access_log ;
(
1
row)
우 리 는 그 가 진행 하고 있 는 SQL 문 구 를 볼 수 있다.그리고 우 리 는 이 SQL 들 을 성능 최적화 할 수 있다.
만약 에 selection 문 구 였 다 면 실행 속도 가 느 렸 다 면 explain 으로 그의 execute plan 을 살 펴 보고 적당 한 index 가 있 는 지,아니면 어떤 table 이 오랫동안 분석 하지 않 았 는 지 등 을 볼 수 있 습 니 다.
또한,KILL 하나의 session 스 크 립 트 를 제공 할 수 있 습 니 다.예 를 들 어 session 이 사용 하 는 자원 이 너무 많 습 니 다.kill 을 사용 하지 않 으 면 시스템 다운 을 초래 할 수 있 습 니 다.
killsession.sh:
#
!/
bin
/
sh
################################################
# Author:linux_prog #
# use to kill one session. #
################################################
if
test
-
z $
1
; then
echo
"
Usage:$0 pid
"
exit
10
fi
SID
=
$
1
echo
"
select pg_cancel_backend($SID);
"
|
psql
: :
[pgsql@webtrends bin]$ .
/
killsession.sh
3665
pg_cancel_backend
-------------------
1
(
1
row)
아까 자원 을 많이 차지 하 던 session 의 현재 SQL 작업 이 cancel 에 의 해 떨 어 졌 습 니 다.
3665 psql 에 표 시 됩 니 다:
pgsql=# insert into access_log select * from access_log ;
ERROR: canceling query due to user request
(3)각 table 또는 index 의 크기 를 잘 알 고 있 습 니 다.
모든 DBA 는 IO 의 병목 이 모든 데이터베이스 성능 의 병목 이라는 것 을 알 아야 한다.그래서 우 리 는 표 구 조 를 디자인 할 때 모든 필드 의 크기 를 최대한 줄 여야 한다.그래 야 table 의 size 가 최대한 작 을 수 있다.
그리고 저희 가 SQL 조정 을 할 때 먼저 한 것 은 큰 TABLE 의 performance turning 입 니 다.
따라서 모든 table 이나 index 가 사용 하 는 디스크 크기 가 필요 하 다 는 것 을 잘 알 고 있 습 니 다.Oacle 에서 dba 에 직접 접근 할 수 있 습 니 다.segments 라 는 view 는 모든 TABLE 이나 INDEX 의 크기 를 알 수 있 습 니 다.
PostgreSQL 의 contrib/dbsize 에 도 이러한 모듈 이 있 습 니 다.
dblink 를 위 에 설치 한 것 처럼 dbsize.so 를 설치 할 수 있 습 니 다.
이렇게 table:access 보기log 크기:
pgsql=# select relation_size('access_log')/1024/1024 ||'M' as dbsize;
dbsize
--------
332M
(1 row)
이렇게 index:test 보기idx 크기:
pgsql=# select relation_size('test_idx')/1024/1024 ||'M' as dbsize;
dbsize
--------
0M
(1 row)
우 리 는 먼저 스 크 립 트 를 써 서 이런 조작 을 할 수 있다.
이상 의 내용 은 모두 비교적 실 용적 인 것 이기 때문에 여러분 이 깊이 이해 할 수 있다 면 일상적인 데이터 베이스 관리 에서 무시 할 수 없 는 업 무 를 발휘 할 수 있 을 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redmine 데이터베이스를 MySQL에서 PostgreSQL로 마이그레이션 (보충)Redmine 의 Database 를 MySQL 로 운용하고 있었습니다만, MySQL 5.6 이상이나 MariaDB 에는 , , 이러한 티켓이 수년 동안 방치된 상황을 감안하여, PostgreSQL로 마이그레이션하기...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.