22-08-23

Yu Riverยท2022๋…„ 8์›” 23์ผ
0

๊ณต๋ถ€ ์ผ์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
18/28

๐Ÿ—“ 22-08-23

SQLP ์ด๋ก  ๋ณต์Šต

(1) ๊ณ ๋„ํ™”

SQLP ์‹ค๊ธฐ ํ’€์ด

(1) [SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 51๋ฒˆ
(2) [SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 52๋ฒˆ
(3) [SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 53๋ฒˆ
(4) [SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 54๋ฒˆ

SQLP ํ•„๊ธฐ ํ’€์ด

(1) [SQLPํ•„๊ธฐํ’€์ด]2์žฅ SQL ๋ถ„์„ ๋„๊ตฌ

๐Ÿ‘€ 8/23 ๋ณต๊ธฐ

[1] ํŠœ๋‹ ์ฟผ๋ฆฌ์— ๊ด„ํ˜ธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์ค„์—ฌ์•ผ ํ•œ๋‹ค.

[SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 52๋ฒˆ

  • index fast full scan์˜ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ํ•ด์‹œ์กฐ์ธํ•˜๊ณ ๋‚˜์„œ group by ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.
  • group by ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ํ•œ๋ฒˆ ๋” ๊ฐ์‹ธ์„œ 2๊ฐœ ์ด์ƒ์˜ ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง๊ณ  ๊ทธ๋ƒฅ ํ•ฉ์น  ๊ฒƒ !

[2] NVL2๋ฌธ๊ณผ DECODE๋ฌธ

[SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 53๋ฒˆ

  • nvl2๋ฌธ : NVL2 ํ•จ์ˆ˜๋Š” NULL์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ง€์ •๊ฐ’1์„ ์ถœ๋ ฅํ•˜๊ณ , NULL์ธ ๊ฒฝ์šฐ ์ง€์ •๊ฐ’2๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
NVL2("๊ฐ’", "์ง€์ •๊ฐ’1", "์ง€์ •๊ฐ’2")
NVL2("๊ฐ’", "NOT NULL", "NULL") 
  • decode๋ฌธ
DECODE(์ปฌ๋Ÿผ, ์กฐ๊ฑด1, ๊ฒฐ๊ณผ1, ์กฐ๊ฑด2, ๊ฒฐ๊ณผ2, ์กฐ๊ฑด3, ๊ฒฐ๊ณผ3..........) 

[3] ์กฐ๊ฑด ๊ตฌ๋ถ„๊ฐ’์— ๋”ฐ๋ผ ์กฐ์ธ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์ด ๋ฐ”๋€” ๋•Œ

[SQLP์‹ค๊ธฐํ’€์ด]4์žฅ ์กฐ์ธํŠœ๋‹(4)-๊ณ ๊ธ‰์กฐ์ธ๊ธฐ๋ฒ• 53๋ฒˆ

  • union all์„ ์ด์šฉํ•œ๋‹ค.
  • ๋ฌธ์ œ ์กฐ๊ฑด ๊ฐ’์„ ๊ผญ ์ฝ์–ด๋ผ!!( ์ด๊ฑด ํžŒํŠธ ์‚ฌ์šฉ๊ณผ ์ธ๋ฑ์Šค ์žฌ๊ตฌ์„ฑ์„ ๋ชปํ•˜๊ฒŒ ํ–ˆ๋‹ค.)

[4] ์˜ค๋ผํด AutoTrace์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด

โœ… ์˜ค๋ผํด AutoTrace์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด

  • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš
  • ์‹ค์ œ ๋””์Šคํฌ์—์„œ ์ฝ์€ ๋ธ”๋ก ์ˆ˜
  • ์‹ค์ œ ๊ธฐ๋กํ•œ Redo ํฌ๊ธฐ
  • โญ๏ธ ์˜ค๋ผํด AutoTrace์—์„œ ์‹ค์ œ ์‚ฌ์šฉํ•œ CPU Time์€ ์•Œ ์ˆ˜ ์—†๋‹ค.

โœ… ์˜ค๋ผํด ๊ธฐ๋ณธ Trace์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด

  • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš
  • ์‹ค์ œ ๋””์Šคํฌ์—์„œ ์ฝ์€ ๋ธ”๋ก ์ˆ˜
  • ์‹ค์ œ ์‚ฌ์šฉํ•œ CPU Time
  1. ์˜ค๋ผํด์˜ ๊ธฐ๋ณธ SQL ํŠธ๋ ˆ์ด์Šค(10046 ํŠธ๋ ˆ์ด์Šค)์—์„œ ์‹ค์ œ ๊ธฐ๋กํ•œ Redo ํฌ๊ธฐ๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.
  2. autotrace์—์„œ๋Š” ์‹ค์ œ ์‚ฌ์šฉํ•œ CPU Time์„ ์•Œ ์ˆ˜ ์—†๊ณ  ์˜ค๋ผํด์˜ ๊ธฐ๋ณธ SQL ํŠธ๋ ˆ์ด์Šค์—์„œ๋Š” ์‹ค์ œ ๊ธฐ๋กํ•œ Redo ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค.

[5] ์˜ค๋ผํด AutoTrace์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜

โœ… AutoTrace์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜

[ํ‚ค์›Œ๋“œ ๋‹ค์„ฏ๊ฐ€์ง€๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.]

  • ๊ณตํ†ต ๋ฌธ๋ฒ• : set autotrace
  • ์„ ํƒ ๋ฌธ๋ฒ•1(๊ฒฐ๊ณผ์ถœ๋ ฅ ์—ฌ๋ถ€)
    • ๊ฒฐ๊ณผ ์ถœ๋ ฅ : on
    • ๊ฒฐ๊ณผ ๋ฏธ์ถœ๋ ฅ : traceonly
  • ์„ ํƒ ๋ฌธ๋ฒ•2(์‹คํ–‰๊ณ„ํš/์‹คํ–‰ํ†ต๊ณ„)
    • ์‹คํ–‰๊ณ„ํš : explain
    • ์‹คํ–‰ํ†ต๊ณ„ : statistics

[๊ฒฐ๊ณผ ์ถœ๋ ฅ O (๋‹น์—ฐํžˆ SQL ์‹คํ–‰)]

  1. set autotrace on
    • SQL์„ ์‹คํ–‰
    • ๊ฒฐ๊ณผ์ง‘ํ•ฉ ์žˆ์Œ
    • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš ๋ฐ ์‹คํ–‰ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅ
  2. set autotrace on explain
    • SQL์„ ์‹คํ–‰
    • ๊ฒฐ๊ณผ์ง‘ํ•ฉ ์žˆ์Œ
    • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš์„ ์ถœ๋ ฅ
  3. set autotrace on statistics
    • SQL์„ ์‹คํ–‰ํ•˜๊ณ 
    • ๊ฒฐ๊ณผ์ง‘ํ•ฉ ์žˆ์Œ
    • ์‹คํ–‰ํ†ต๊ณ„๋ฅผ ์ถœ๋ ฅ

[๊ฒฐ๊ณผ ์ถœ๋ ฅ X]

  1. set autotrace traceonly
    • SQL์„ ์‹คํ–‰ํ•˜๊ณ 
    • ๊ฒฐ๊ณผ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ 
    • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš๊ณผ ์‹คํ–‰ํ†ต๊ณ„ ์ถœ๋ ฅ
  2. set autotrace traceonly explain
    • โญ๏ธ SQL์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ 
    • ์˜ˆ์ƒ ์‹คํ–‰๊ณ„ํš๋งŒ ์ถœ๋ ฅ
  3. set autotrace traceonly statistics
    • SQL์„ ์‹คํ–‰ํ•˜๊ณ 
    • ๊ฒฐ๊ณผ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ 
    • ์‹คํ–‰ํ†ต๊ณ„๋งŒ ์ถœ๋ ฅ

[6] ์˜ค๋ผํด SGA ๋ฉ”๋ชจ๋ฆฌ์— ๊ธฐ๋กํ•œ SQL ํŠธ๋ ˆ์ด์Šค ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ

  1. SQL์— gather_plan_statistics ํžŒํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด, SQL ํŠธ๋ ˆ์ด์Šค ์ •๋ณด๋ฅผ ์„œ๋ฒ„ ํŒŒ์ผ์ด ์•„๋‹Œ SGA ๋ฉ”๋ชจ๋ฆฌ์— ๊ธฐ๋กํ•œ๋‹ค.
  2. SGA ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ํŠธ๋ ˆ์ด์Šค ์ •๋ณด๋ฅผ dbms_xplan.display_cursor ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ถ„์„ํ•˜๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ํฌ๋งคํŒ…ํ•ด ์ค€๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ์ธ์ž์—๋Š” SQL ์ปค์„œ์˜ ID์™€ CHILD_NUMBER๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ์ธ์ž์— null, null์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์ง์ „์— ์ˆ˜ํ–‰ํ•œ ์ปค์„œ ID์™€ CHILD_NUMBER๋ฅผ ๋‚ด๋ถ€์—์„œ ์ž๋™ ์„ ํƒํ•ด ์ค€๋‹ค.

[7] _DBMS_XPLAN.DISPLAY_CURSOR์™€ SQL ํŠธ๋ ˆ์ด์Šค ํ•ญ๋ชฉ ๋น„๊ต

โœ… _DBMS_XPLAN.DISPLAY_CURSOR ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•œ SQL ํŠธ๋ ˆ์ด์Šค ์ •๋ณด

  • Starts : ๊ฐ ์˜คํผ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋ณ„ ์‹คํ–‰ ํšŸ์ˆ˜
  • E-Rows : ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์˜ˆ์ƒํ•œ Rows
  • A-Rows : ๊ฐ ์˜คํผ๋ ˆ์ด์…˜ ๋‹จ๊ณ„์—์„œ ์ฝ๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•œ ๋กœ์šฐ ์ˆ˜
    • SQL ํŠธ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์—์„œ๋Š” rows
  • A-Times : ๊ฐ ์˜คํผ๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋ณ„ ์†Œ์š”์‹œ๊ฐ„
    • SQL ํŠธ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์—์„œ๋Š” times
  • Buffers : ์บ์‹œ์—์„œ ์ฝ์€ ๋ฒ„ํผ ๋ธ”๋ก ์ˆ˜
    • SQL ํŠธ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์—์„œ๋Š” query(=cr) , current
  • Reads : ๋””์Šคํฌ์—์„œ ์ฝ์€ ๋ธ”๋ก์ˆ˜
    • SQL ํŠธ๋ ˆ์ด์Šค ํ•ญ๋ชฉ์—์„œ๋Š” pr

[8] sql server์—์„œ SQL ํŠธ๋ ˆ์ด์Šค ์˜ต์…˜

โœ… sql server์—์„œ SQL ํŠธ๋ ˆ์ด์Šค๋ฅผ ํ™•์ธํ•˜๊ณ ์ž ์„ค์ •ํ•˜๋Š” ์˜ต์…˜

  • ๊ณตํ†ต ๋ฌธ๋ฒ• : set statistics ? on
  • ์„ ํƒ ๋ฌธ๋ฒ•
    • profile
    • io
    • time
  • ์„ ํƒ ๋ฌธ๋ฒ•2(์‹คํ–‰๊ณ„ํš/์‹คํ–‰ํ†ต๊ณ„)
    • ์‹คํ–‰๊ณ„ํš : explain
    • ์‹คํ–‰ํ†ต๊ณ„ : statistics
  1. set statistics profile on
    • ๊ฐ ์ฟผ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ๋’ค์—๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰
    • ํ”„๋กœํ•„์„ ๋ณด์—ฌ ์ฃผ๋Š” ์ถ”๊ฐ€ ๊ฒฐ๊ณผ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜
    • ์ถœ๋ ฅ์—๋Š” ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž์—์„œ ์ฒ˜๋ฆฌํ•œ ํ–‰ ์ˆ˜ ๋ฐ ์—ฐ์‚ฐ์ž์˜ ์‹คํ–‰ ํšŸ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋„ ํฌํ•จ
  2. set statistics io on
    • Transact-SQL ๋ฌธ์ด ์‹คํ–‰๋˜๊ณ  ๋‚˜์„œ ํ•ด๋‹น ๋ฌธ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋””์Šคํฌ ๋™์ž‘ ์–‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œ
  3. set statistics time on
    -๊ฐ Transact-SQL ๋ฌธ์„ ๊ตฌ๋ฌธ ๋ถ„์„, ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ ํ•œ ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ (0.001์ดˆ) ๋‹จ์œ„๋กœ ํ‘œ์‹œ

[9] ๋Œ€๊ธฐ์ด๋ฒคํŠธ

  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฒ„ํผ์บ์‹œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ ๋“ฑ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ž˜์น˜๋ฅผ ํš๋“ํ•  ๋•Œ๋งˆ๋‹ค ๋‚˜ํƒ€๋‚œ๋‹ค. ๐Ÿ‘‰ โŒ
    • ๋ž˜์น˜๋ฅผ ํš๋“ํ•˜๋Š” ๊ณผ์ •์— ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ, ๊ฒฝํ•ฉ์—†์ด ๋ฐ”๋กœ ์ฝ์œผ๋ฉด ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  2. library cache lock , library cache pin ๋Œ€๊ธฐ์ด๋ฒคํŠธ๋Š” ์ฃผ๋กœ SOL ์ˆ˜ํ–‰ ๋„์ค‘ DDL์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋‚˜ํƒ€๋‚œ๋‹ค.
  3. free buffer waits ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๋Š” ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฒ„ํผ ์บ์‹œ์—์„œ Free Buffer๋ฅผ ์ฐพ์ง€๋ชปํ•ด DBWR์—๊ฒŒ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด ๋‹ฌ๋ผ๊ณ  ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ํ›„ ๋Œ€๊ธฐํ•  ๋•Œ ๋‚˜ํƒ€๋‚œ๋‹ค.
  4. log file sync ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๋Š” ์ปค๋ฐ‹ ๋ช…๋ น์„ ์ „์†ก๋ฐ›์€ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ LGWR์—๊ฒŒ ๋กœ๊ทธ ๋ฒ„ํผ๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•ด ๋‹ฌ๋ผ๊ณ  ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ ํ›„ ๋Œ€๊ธฐํ•  ๋•Œ ๋‚˜ํƒ€๋‚œ๋‹ค.
  5. Latch: shared pool ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๋Š” shared pool ๋ž˜์น˜๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ๊ณผ์ •์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝํ•ฉ๊ณผ ๊ด€๋ จ ์žˆ์œผ๋ฉฐ, ํ•˜๋“œ ํŒŒ์‹ฑ์„ ๋™์‹œ์— ์‹ฌํ•˜๊ฒŒ ์ผ์œผํ‚ฌ ๋•Œ ์ฃผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.

[10] ์ธ์Šคํ„ด์Šค ํšจ์œจ์„ฑ ํ•ญ๋ชฉ๋“ค

  1. Soft Parse : ์‹คํ–‰๊ณ„ํš์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ์—์„œ ์ฐพ์•„์ ธ ํ•˜๋“œํŒŒ์‹ฑ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  SQL ์„์ˆ˜ํ–‰ํ•œ ๋น„์œจ์ด๋‹ค. ๊ตฌํ•˜๋Š” ๊ณต์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    (์ „์ฒด Parse Call ํšŸ์ˆ˜ - ํ•˜๋“œํŒŒ์‹ฑ ํšŸ์ˆ˜) / (์ „์ฒด Parse Call ํšŸ์ˆ˜)* 100
  2. Execute to Parse : Parse Call ์—†์ด ๊ณง๋ฐ”๋กœ SQL์„ ์ˆ˜ํ–‰ํ•œ ๋น„์œจ, ์ฆ‰ ์ปค์„œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์บ์‹ฑํ•œ ์ฑ„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ ๋น„์œจ์ด๋‹ค.
  3. Parse CPU to Parse Elapsed : ํŒŒ์‹ฑ ์ด ์†Œ์š” ์‹œ๊ฐ„ ์ค‘ CPU time์ด ์ฐจ์ง€ํ•œ ๋น„์œจ์ด๋‹ค. ํŒŒ์‹ฑ์— ์†Œ์š”๋œ ์‹œ๊ฐ„ ์ค‘ ์‹ค์ œ ์ผ์„ ์ˆ˜ํ–‰ํ•œ ์‹œ๊ฐ„ ๋น„์œจ์„ ๋งํ•˜๋ฉฐ, ์ด ๊ฐ’์ด ๋‚ฎ๋‹ค๋ฉด ํŒŒ์‹ฑ ๋„์ค‘ ๋Œ€๊ธฐ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
profile
๋„๊ด‘์–‘ํšŒ(้Ÿœๅ…‰้คŠๆ™ฆ) โ€˜๋น›์„ ๊ฐ์ถ”๊ณ  ์–ด๋‘ ์†์—์„œ ํž˜์„ ๊ธฐ๋ฅธ๋‹คโ€™

0๊ฐœ์˜ ๋Œ“๊ธ€