Skip to main content
01B

๊ธฐ๋ณธ Architecture

์˜ค๋ผํด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ด๋ฅผ ์•ก์„ธ์Šคํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ์˜์—ญ(SGA)์ด ์žˆ๋‹ค.

0F
0F
  • ๋””์Šคํฌ I/O ์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ I/O ๋Š” ๋งค์šฐ ๋น ๋ฅด๋‹ค.
  • ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์•ก์„ธ์Šค ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” Lock ๊ณผ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ SGA ์— ์œ„์น˜ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ก์„ธ์Šค๋ฅผ ์ง๋ ฌํ™” ํ•˜๊ธฐ ์œ„ํ•œ Latch๋„ ํ•„์š”.
  • ์˜ค๋ผํด์€ ๋ธ”๋ก ๋‹จ์œ„๋กœ I/O ํ•˜๋ฉฐ, DBWR/CKPT ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์บ์‹œ-๋ฐ์ดํ„ฐํŒŒ์ผ ๋™๊ธฐํ™” ์ˆ˜ํ–‰.

About 3 minOracle DBcrashcourseoracleoracle-dboracle-sql
01C

Auto Trace

๊ฐœ์š”

SQL ์ˆ˜ํ–‰ ์‹œ ์‹ค์ œ ์ผ๋Ÿ‰ ์ธก์ • ๋ฐ ํŠœ๋‹ํ•˜๋Š”๋ฐ ์œ ์šฉํ•œ ์ •๋ณด๋“ค์„ ๋งŽ์ด ํฌํ•จํ•˜๋Š” ๋„๊ตฌ

AutoTrace ์˜ต์…˜

์•„๋ž˜์™€ ๊ฐ™์€ ์˜ต์…˜์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ถœ๋ ฅํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ

  1. set autotrace on: SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ์‹คํ–‰ ๊ณ„ํš ๋ฐ ์‹คํ–‰ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅ
  2. set autotrace on explain: SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ์‹คํ–‰ ๊ณ„ํš์„ ์ถœ๋ ฅ
  3. set autotrace on statistics: SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅ
  4. set autotrace traceonly: SQL์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ๊ทธ ๊ฒฐ๊ณผ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ , ์‹คํ–‰๊ณ„ํš๊ณผ ์‹คํ–‰ํ†ต๊ณ„๋งŒ์„ ์ถœ๋ ฅ
  5. set autotrace traceonly explain: SQL์„ ์‹คํ–‰ํ•˜์ง€์•Š๊ณ  ์‹คํ–‰๊ณ„ํš๋งŒ์„ ์ถœ๋ ฅ
  6. set autotrace traceonly statistics: SQL์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ๊ทธ ๊ฒฐ๊ณผ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ , ์‹คํ–‰ํ†ต๊ณ„๋งŒ์„ ์ถœ๋ ฅ

Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql
01D

์ธ๋ฑ์Šค ๊ธฐ๋ณธ ์›๋ฆฌ

B*Tree ์ธ๋ฑ์Šค๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฒ”์œ„ ์Šค์บ” ์‹œ์ž‘์ง€์ ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ ๋ธ”๋ก๋ถ€ํ„ฐ ๋ฆฌํ”„๋ธ”๋ก๊นŒ์ง€์˜ ์ˆ˜์ง์  ํƒ์ƒ‰ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•จ

์ธ๋ฑ์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ฑฐ๋‚˜ ๋ฒ”์œ„ ์Šค์บ”์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  • ์ •์ƒ์ ์ธ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์Šค์บ”์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ(Index Full Scan์€ ๊ฐ€๋Šฅ)
    • ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ€๊ณต: WHERE SUBSTR(์—…์ฒด๋ช…, 1, 2) = '๋Œ€ํ•œ'
    • ๋ถ€์ •ํ˜• ๋น„๊ต: WHERE ์ง์—… <> 'ํ•™์ƒ'
    • IS NOT NULL ์กฐ๊ฑด๋„ ๋ถ€์ •ํ˜• ๋น„๊ต์— ํ•ด๋‹น: WHERE ๋ถ€์„œ์ฝ”๋“œ IS NOT NULL
      • '๋ถ€์„œ์ฝ”๋“œ'์— ๋‹จ์ผ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ธ๋ฑ์Šค ์ „์ฒด ์Šค์บ”์„ ํ†ตํ•ด ์–ป์€ ๋ ˆ์ฝ”๋“œ๋Š” ๋ชจ๋‘ '๋ถ€์„œ์ฝ”๋“œ IS NOT NULL' ์กฐ๊ฑด์„ ๋งŒ์กฑ.
  • ์ธ๋ฑ์Šค ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
    • IS NULL ์กฐ๊ฑด๋งŒ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ: where ์—ฐ๋ฝ์ฒ˜ is null
      • ์˜ˆ์™ธ์ ์œผ๋กœ ํ•ด๋‹น ์ปฌ๋Ÿผ์ด not null ์ œ์•ฝ์ด ์žˆ์„ ๊ฒฝ์šฐ Table Full Scan์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
    • IS NULL ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์ปฌ๋Ÿผ์— is null ์ด์™ธ์˜ ์กฐ๊ฑด์‹์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด Index Range Scan ๊ฐ€๋Šฅ (์ธ๋ฑ์Šค ์„ ๋‘ ์ปฌ๋Ÿผ์ด ์กฐ๊ฑด๊ฑธ์— ๋ˆ„๋ฝ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค) emp_idx : job + deptno where job is null and deptno = 20

Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql
02A

์šฉ์–ด

  • RBO (Rule-Based Optimizer)
  • CBO (Cost-based Optimizer)

Index ๊ด€๋ จ ์ž๋ฃŒ

  • https://use-the-index-luke.com/
  • http://studybyyourself.com/seminar/sql/course/?lang=en
  • https://docs.oracle.com/cd/B10501_01/server.920/a96533/optimops.htm
  • https://oracle-base.com/articles/misc/cost-based-optimizer-and-database-statistics
  • https://www.siue.edu/~dbock/cmis565/module12-indexes.htm
  • http://www.dba-oracle.com/art_9i_indexing.htm
  • http://www.remote-dba.net/t_op_sql_btree_indexes.htm
  • https://www.morganslibrary.org/reference/indexes.html
  • https://dev.to/databasestar/a-guide-to-indexes-in-oracle
  • https://www.1keydata.com/sql/sql-index.html
  • https://www.tutorialspoint.com/sql/sql-indexes.htm
  • https://d2.naver.com/helloworld/1155
  • https://www.geeksforgeeks.org/sql-indexes/
  • http://www.dba-oracle.com/t_reverse_key_indexes_dml_insert.htm
  • http://wiki.gurubee.net/pages/viewpage.action?pageId=26741180
  • https://richardfoote.wordpress.com/2008/01/14/introduction-to-reverse-key-indexes-part-i/
  • http://wiki.gurubee.net/pages/viewpage.action?pageId=26741180

About 1 minOracle DBcrashcourseoracleoracle-dboracle-sql
03A

Hint

๊ธฐ๋ณธ ์‚ฌ์šฉ์˜ˆ

SELECT /*+ INDEX(idx_col1) */ 
  id, password, name
FROM 
  emp;

SELECT /*+ ORDERED  INDEX(b idx_col1) */ 
  id, password, name
FROM
  emp a, depart b

About 1 minOracle DBcrashcourseoracleoracle-dboracle-sql
03B

trace

1. ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE big_table AS 
SELECT 
  * 
FROM dba_tables, (SELECT level FROM DUAL CONNECT BY level <= 1000)
WHERE 1=1;

About 1 minOracle DBcrashcourseoracleoracle-dboracle-sql
03C

Partitioning

Range Partitioning

typically by date

CREATE TABLE ์ฃผ๋ฌธ(์ฃผ๋ฌธ๋ฒˆํ˜ธ NUMBER, ์ฃผ๋ฌธ์ผ์ž VARCHAR2(8), ๊ณ ๊ฐ ID VARCHAR2(5) )
PARTITION BY RANGE(์ฃผ๋ฌธ์ผ์ž) (
	PARTITION P2009_Q1 VALUES LESS THAN ('20090401')
,	PARTITION P2009_Q2 VALUES LESS THAN ('20090701')
,	PARTITION P2009_Q3 VALUES LESS THAN ('20091001')
,	PARTITION P2009_Q4 VALUES LESS THAN ('20100101')
,	PARTITION P2010_Q1 VALUES LESS THAN ('20090701')
,	PARTITION P9999_MX VALUES LESS THAN (MAXVALUE)
);

Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql
03D

JOIN

๋ฐฉ์‹

  • NESTED LOOP JOIN

  • SORT MERGE JOIN

  • HASH JOIN

OUTER JOIN

NESTED LOOP JOIN

  • SQL ๋ฌธ
SELECT A.DNAME, B.ENAME, B.SAL
  FROM EMP B, DEPT A
 WHERE A.DEPTNO = B.DEPTNO
   AND B.SAL > 200
   AND A.LOCATION = 'DALLAS'

Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql
DB Server ์„ฑ๋Šฅ ํ–ฅ์ƒ, ๋ถ„์„ ๋ฐ ํŠœ๋‹ ์ „๋ฌธ๊ฐ€ ํ–ฅ์ƒ๊ณผ์ •

NOTE

{{ $frontmatter.description }} ๊ด€๋ จ ์ •๋ฆฌ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


ํ•™์Šต๋ชฉํ‘œ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ์ƒ์˜ ๋ฌธ์ œ์  ๋ถ„์„
  • ์„ฑ๋Šฅ๊ฐœ์„  ๋ชฉํ‘œ ์„ค์ • ๋ฐ ์ˆ˜ํ–‰
  • ๋ฐฉ๋ฒ•์˜ ์ •์˜, ์„ฑ๋Šฅ๊ฐœ์„  ๊ฒฐ๊ณผ๋ฅผ ์ •๋Ÿ‰์  ํ‰๊ฐ€
  • ๊ฐ ๋‹จ๊ณ„๋ณ„ ์‚ฐ์ถœ๋ฌผ ๋ฐ ์ˆ˜ํ–‰ ํ™œ๋™์„ ๊ทœ์ • ๋ฐฉ๋ฒ• ๊ณต๋ถ€


Less than 1 minuteOracle DBcrashcourseoracleoracle-dboracle-sql