SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
(오라클 SQL튜닝을 위한 쿼리문 작성법 강좌)오라클 SQL/쿼리 튜닝은 간단한 SQL구문 최적화 부터 시작을 하게되죠, SQL을 처음 사용할 때 부터 최적화 하는 방법에 주의해서 공부하시면 저절로 튜닝 됩니다. 본 PPT 강좌는 탑크리에듀(www.topcredu.co.kr), 오라클자바커뮤니티(ojc.asia)에서 제공하는 교육강좌 입니다.
SQL튜닝을 위한 도구중 하나인 "오라클의 10053 이벤트" 간단히 소개하고 오라클 함수를 만들어 간단히 테스트 후 옵티마이저의 Query Transformation, Optimization 과정(조인방법 결정, 드라이빙테이블 선정), 실행계획 생성등을 Trace 파일을 만들어 확인하는 PPT 강좌 입니다.
(오라클 SQL튜닝을 위한 쿼리문 작성법 강좌)오라클 SQL/쿼리 튜닝은 간단한 SQL구문 최적화 부터 시작을 하게되죠, SQL을 처음 사용할 때 부터 최적화 하는 방법에 주의해서 공부하시면 저절로 튜닝 됩니다. 본 PPT 강좌는 탑크리에듀(www.topcredu.co.kr), 오라클자바커뮤니티(ojc.asia)에서 제공하는 교육강좌 입니다.
SQL*Plus에서 사용자는 자동으로 Optimizer에서 실행계획과 통계정보를 얻을 수 있다. AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용 된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화 하기 위해 SET AUTOTRACE ON, 비활성화 하기위해 SET AUTOTRACE OFF하고 하면 됩니다. 참고로 SET AUTOTRACE에서 사용 할 수 있는 옵션은 다음과 같다.
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...탑크리에듀(구로디지털단지역3번출구 2분거리)
(개발시 SQL튜닝은 기본 입니다.)서브쿼리튜닝, 쿼리 변환(Query Transformation)에 대한 이해는 SQL튜닝의 핵심입니다. 서브쿼리 푸시 및 서브쿼리의 드라이빙을 제어할 수 있는 push_subq, no_push_subq 힌트에 대해 알아보고 실행방법에 따른 서브쿼리의 종류도 설명한 영상 입니다. SQL튜닝 교육은 탑크리에듀(www.topcredu.co.kr)에서 해결해 드리겠습니다.
(해시조인과 관련된 오라클힌트)해시조인은 두테이블 중 작은 테이블(Build Input, Driving Table)을 메모리에 조인키를 기반으로 해시테이블을 생성하고 해시테이블내에 행들을 위치시키기 위해 해시함수를 이용하며 나머지 테이블을 스캔하면서 메모리에 있는 해시테이블과 조인 조건을 만족하는 데이터를 찾는 조인이다. 중첩루프조인과 같이 조인시 발생하는 랜덤액세스에 대한 부하가 없는 조인방식이다. 관계형 데이터베이스에서 가장 비용이 많이 들어가는 조인방법으로 주로 작은 테이블과 큰 테이블의 조인 시 사용되며 , 드라이빙 조건과 상관없이 좋은 성능을 발휘할 수 있는 조인 방법이며 대체로 제일 빠르다.
탑크리에듀(http://www.topcredu.co.kr), 오라클자바커뮤니티(http://ojc.asia)에서 제공하는 온라인 무료 화상교육, 오라클 SQL힌트/튜닝 강의자료 3회차 입니다. 12월22일 진행되는 교육에서는 중첩루프조인 소개 및 USE_NL, USE_NL_WITH_INDEX, ORDERED 힌트 구문에 대해 살펴볼 예정 입니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
16번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
SQL*Plus에서 사용자는 자동으로 Optimizer에서 실행계획과 통계정보를 얻을 수 있다. AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용 된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화 하기 위해 SET AUTOTRACE ON, 비활성화 하기위해 SET AUTOTRACE OFF하고 하면 됩니다. 참고로 SET AUTOTRACE에서 사용 할 수 있는 옵션은 다음과 같다.
(쿼리 변환, Query Transformation,서브쿼리푸시,SubQuery Pushing)SQL튜닝을 위해 서브쿼리의 드라이빙을 제어...탑크리에듀(구로디지털단지역3번출구 2분거리)
(개발시 SQL튜닝은 기본 입니다.)서브쿼리튜닝, 쿼리 변환(Query Transformation)에 대한 이해는 SQL튜닝의 핵심입니다. 서브쿼리 푸시 및 서브쿼리의 드라이빙을 제어할 수 있는 push_subq, no_push_subq 힌트에 대해 알아보고 실행방법에 따른 서브쿼리의 종류도 설명한 영상 입니다. SQL튜닝 교육은 탑크리에듀(www.topcredu.co.kr)에서 해결해 드리겠습니다.
(해시조인과 관련된 오라클힌트)해시조인은 두테이블 중 작은 테이블(Build Input, Driving Table)을 메모리에 조인키를 기반으로 해시테이블을 생성하고 해시테이블내에 행들을 위치시키기 위해 해시함수를 이용하며 나머지 테이블을 스캔하면서 메모리에 있는 해시테이블과 조인 조건을 만족하는 데이터를 찾는 조인이다. 중첩루프조인과 같이 조인시 발생하는 랜덤액세스에 대한 부하가 없는 조인방식이다. 관계형 데이터베이스에서 가장 비용이 많이 들어가는 조인방법으로 주로 작은 테이블과 큰 테이블의 조인 시 사용되며 , 드라이빙 조건과 상관없이 좋은 성능을 발휘할 수 있는 조인 방법이며 대체로 제일 빠르다.
탑크리에듀(http://www.topcredu.co.kr), 오라클자바커뮤니티(http://ojc.asia)에서 제공하는 온라인 무료 화상교육, 오라클 SQL힌트/튜닝 강의자료 3회차 입니다. 12월22일 진행되는 교육에서는 중첩루프조인 소개 및 USE_NL, USE_NL_WITH_INDEX, ORDERED 힌트 구문에 대해 살펴볼 예정 입니다.
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
16번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
탑크리에듀교육센터(www.topcredu.co.kr)제공
스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)
17번째 자료입니다. 참고하시어 많은 도움되셨길 바랍니다.
교육 및 수강문의/기타문의사항은 홈페이지(www.topcredu.co.kr)를 통하여 하실 수 있습니다.^^
SQL*Plus에서 사용자는 자동으로 Optimizer가 만드는 실행계획과 통계정보를 얻을 수 있다. 이런 경우 AUTOTRACE를 사용하며 DML문을 성공적으로 수행 시 실행계획과 통계정보가 만들어지며 DML문의 성능 튜닝을 위한 방법으로 자주 이용된다.
SET AUTOTRACE를 사용하기 위해선 실행 계획용 테이블(PLAN_TABLE)이 존재해야 하며 구문을 활성화하기 위해 SET AUTOTRACE ON, 비활성화 하기 위해 SET AUTOTRACE OFF하면 된다. 참고로 SET AUTOTRACE에서 사용할 수 있는 옵션은 다음과 같다.
The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. This document explain about MyBatis basic concept.
2016년 PyCon 2016 APAC 의 부대행사인 WriteTheDocs 서울 Meetup(2016년 8월 15일 강남역 메리츠타워 21층 아카마이 코리아)에서 발표한 자료입니다.
프로그래밍 책을 쓰기 위한 환경과 책을 잘 쓰기 위한 도구에 대한 내용과 함께 책을 어떻게 쓰면 좋을지에 대해 이야기를 담았습니다.
17. 번호 자동 증가(SQL 표준)
INT GENERATED ALWAYS AS IDENTITY
CREATE TABLE color (
color_id INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 10 INCREMENT BY 10),
color_name VARCHAR NOT NULL
);
18. 데이터 입력
1) insert
- into, select
2) select into
3) copy
4) create table as
19. insert into
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [,
...] | query }
[ ON CONFLICT [ conflict_target ] conflict_action ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...]
]
26. 데이터 조회
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
27. 데이터 조회 실전
select * from korea_park where park_type = '어린이공원'
select count(*) from korea_park where park_type = '근린공원'
select part_type, count(park_type) from korea_park group by
park_type
28. 데이터 조회 실전
select * from korea_park limit 10 offset 0;
select * from korea_park order by park_type asc
29. window 함수
row_number, rank 등과 같은 함수가 window 함수에 속합니다.
추가적인 함수는
https://www.postgresql.org/docs/9.6/static/functions-window.
html 에서 살펴볼 수 있습니다.
30. JOIN
SQL의 조인은 기본적으로 테이블과 테이블의 행을 서로 묶는데 사용합니다. 조인의
가장 기본적인 형태는 카테시안 조인으로 조인 조건을 지정하지 않는 조인을
일컫습니다.
no name created
1 jiho 201
2 postgres 202
no article_no content
3 1 c01
4 1 c02
1 jiho 201 3 1 c01
1 jiho 201 3 1 c02
2 postgres 202 3 1 c01
2 postgres 202 3 1 c02
41. insert 충돌을 해결하기
테이블에 데이터 입력시 이미 있는 레코드를 추가하면 레코드
충돌로 데이터가 입력되지 않습니다. conflict 옵션을 사용하면
데이터 충돌시 해결책을 제시할 수 있습니다.
insert into korea_park(manage_no, park_name, park_type)
values ('29170-00001', '문화근린공원', '근린공원')
42. insert 충돌시 아무것도 안하기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'근린공원') on conflict (manage_no) do nothing;
43. 데이터 충돌시 데이터 덮어쓰기
insert into korea_park(manage_no, park_name,
park_type) values ('29170-00001', '문화근린공원',
'어린이공원') on conflict (manage_no) do update
set park_type=excluded.park_type;
45. update시 다른 테이블과 조인
UPDATE employees SET sales_count =
sales_count + 1 FROM accounts
WHERE accounts.name = 'Acme Corporation'
AND employees.id = accounts.sales_person;
47. 데이터 삭제 시 다른 테이블과 조인하기
DELETE FROM films USING producers
WHERE producer_id = producers.id AND
producers.name = 'foo';
48. 역할 생성과 제거
create role reader1 login password 'reader1';
create role reader2 login password 'reader2';
49. 권한 부여
grant select (park_name, park_addr_road) on
korea_park to reader1;
grant select (park_name, park_lat, park_long)
on korea_park to reader2;
50. 권한 제거
revoke select (park_name, park_addr_road) on
korea_park from reader1;
revoke select (park_name, park_lat, park_long)
on korea_park from reader2;
51. truncate
truncate는 테이블의 모든 행을 한 번에 지우는 명령입니다.
TRUNCATE korea_park;
truncate korea_park RESTART IDENTITY;
52. 트랜잭션
데이터베이스 조작의 일관성을 보장하기 위한 행동 묶음을
트랜잭션이라고 부릅니다
begin transaction;
commit;
rollback;
end;
53. 트랜잭션
트랜잭션이 시작된 이후 에러가 발생하면 에러가 발생한 이후의
SQL 문장은 유효한 SQL 문장이라고 해도 실행되지 않습니다.
54. PostgreSQL 데이터 타입
bigint, boolean
character, character varying
date, integer
json, numeric
text
timestamp
55. vacuum
1) 변경 또는 삭제된 자료들이 차지 하고 있는 디스크 공간을 다시 사용하기 위한 디스크
공간 확보 작업이 필요하다.
2) PostgreSQL 쿼리 실행 계획기가 사용할 자료 통계 정보를 갱신할 필요가 있다.
3) 인덱스 전용 검색 성능을 향상하는데 이용하는 실자료 지도(visibility map, vm) 정보를
갱신하는 작업이 필요하다.
4) 트랜잭션 ID 겹침이나, 다중 트랙잭션 ID 겹침 상황으로 오래된 자료가 손실 될
가능성을 방지해야할 필요가 있다.
56. 베이큠 작업의 실행
-- DB 전체 풀 실행
vacuum full analyze;
-- DB 전체 간단하게 실행
vacuum verbose analyze;
-- 해당 테이블만 간단하게 실행
vacuum analyse [테이블 명];
-- 특정 테이블만 풀 실행
vacuum full [테이블명];