Skip to content
isdnetworks
Go back

์กฐํšŒ ํ‚ค๊ฐ€ ์–ด๋А ์ปฌ๋Ÿผ์ธ์ง€ ์ •ํ™•ํžˆ ์•Œ์•„์•ผ ํ–ˆ๋‹ค

์ฃผ๋ฌธ์„ ์ฐพ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋А๋ ธ๋‹ค. ์ธ๋ฑ์Šค๋Š” ์ด๋ฏธ ์žˆ์—ˆ๋‹ค.

Table of contents

Open Table of contents

๋น„์Šทํ•œ ์ปฌ๋Ÿผ์ด ์—ฌ๋Ÿฟ์ด์—ˆ๋‹ค

ํ…Œ์ด๋ธ”์„ ์—ด์–ด ๋ณด๋‹ˆ ์ฃผ๋ฌธ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๋„ท์ด์—ˆ๋‹ค.

`no`              bigint       ์ฃผ๋ฌธ ์ผ๋ จ๋ฒˆํ˜ธ
`order_no`        varchar(20)  ์ฃผ๋ฌธ๋ฒˆํ˜ธ (ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒƒ)
`channel_order_no` varchar(50) ์ฑ„๋„์ด ์ค€ ์ฃผ๋ฌธ๋ฒˆํ˜ธ
`payment_no`      varchar(30)  ๊ฒฐ์ œ์‚ฌ ๊ฑฐ๋ž˜๋ฒˆํ˜ธ

๋„ท ๋‹ค ์ฃผ๋ฌธ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์ƒํ™ฉ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒƒ์„ ์“ฐ๋Š”๋ฐ ์ด๋ฆ„์ด ๋น„์Šทํ•ด ์–ด๋А ๊ฒƒ์ด ์กฐํšŒ์— ์“ฐ์ด๋Š”์ง€๊ฐ€ ์ฝ”๋“œ๋กœ๋Š” ์•ˆ ๊ฐˆ๋ ธ๋‹ค.

CREATE INDEX ix_order_no ON orders (order_no);

์ธ๋ฑ์Šค๋Š” order_no ์— ๊ฑธ๋ ค ์žˆ์—ˆ๋Š”๋ฐ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฒˆํ˜ธ์ด๋‹ˆ ๊ทธ๊ฒƒ์œผ๋กœ ์ฐพ์„ ๊ฒƒ์ด๋ผ๋Š” ํŒ๋‹จ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๊ฑด ์‚ฌ๋žŒ๋„ ๊ทธ๋ ‡๊ฒŒ ๋ดค์„ ํ…๋ฐ ๊ทธ ํŒ๋‹จ์ด ์ง€๊ธˆ๋„ ๋งž๋Š”์ง€๋Š” ๋”ฐ๋กœ ํ™•์ธํ•  ์ผ์ด์—ˆ๋‹ค.

์ธ๋ฑ์Šค๋Š” ํ•œ ๋ฒˆ ๊ฑธ๋ฉด ์ž˜ ์•ˆ ๋“ค์—ฌ๋‹ค๋ณด๊ณ  ๊ฑธ ๋•Œ์˜ ํŒ๋‹จ์ด ๊ทธ๋Œ€๋กœ ๊ตณ์–ด ๋ช‡ ํ•ด๋ฅผ ๊ฐ„๋‹ค.

๊ทธ ์‚ฌ์ด์— ์กฐํšŒํ•˜๋Š” ์ชฝ์€ ๊ณ„์† ๋ฐ”๋€Œ๊ณ  ํ™”๋ฉด์ด ๋Š˜๊ณ  ์—ฐ๋™์ด ๋ถ™์œผ๋ฉฐ ๋ฌด์—‡์œผ๋กœ ์ฐพ๋Š”์ง€๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

์›์ธ โ€” ์ธ๋ฑ์Šค์™€ ๋‹ค๋ฅธ ์กฐํšŒ ์ปฌ๋Ÿผ

๋А๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ๋ดค๋‹ค.

SELECT * FROM orders WHERE channel_order_no = ?;

channel_order_no ๋กœ ์ฐพ๋Š”๋ฐ ๊ฑฐ๊ธฐ์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†์—ˆ๊ณ  ์ด ์กฐํšŒ๊ฐ€ ํ•˜๋ฃจ 12๋งŒ ๋ฒˆ ๋Œ๊ณ  ์žˆ์—ˆ๋‹ค.

EXPLAIN SELECT * FROM orders WHERE channel_order_no = 'ABC123';
type: ALL   rows: 4218441

type ์ด ALL ์ด๊ณ  rows ๊ฐ€ 420๋งŒ์ด๋ผ ํ•œ ๊ฑด์„ ์ฐพ์œผ๋ ค๊ณ  ์ „์ฒด๋ฅผ ์ฝ๊ณ  ์žˆ์—ˆ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š”๋ฐ ๋А๋ฆฌ๋ฉด ๊ทธ๊ฒƒ์„ ์•ˆ ํƒ€๋Š” ๊ฒƒ์ด๋‹ค. ์กฐ๊ฑด์˜ ์ปฌ๋Ÿผ๊ณผ ์ธ๋ฑ์Šค์˜ ์ปฌ๋Ÿผ์ด ๋‹ฌ๋ž๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ ํ™•์ธํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์—ฌ๊ธฐ์„œ ๋ง‰ํžŒ๋‹ค. ์–ด๋А ์ปฌ๋Ÿผ์— ๊ฑธ๋ ธ๋Š”์ง€๊นŒ์ง€ ๋ด์•ผ ๊ทธ๋‹ค์Œ์ด ๋‚˜์˜จ๋‹ค.

๋А๋ฆฌ๋‹ค๋Š” ์ œ๋ณด์™€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋‘˜ ๋‹ค ๋งž์•˜๊ณ  ๋‘˜์„ ์ด์–ด ๋ถ™์ธ ๊ฒฐ๋ก ๋งŒ ํ‹€๋ ธ๋‹ค.

์–ด๋А ๊ฒƒ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ฐพ๋Š”์ง€ ์…Œ๋‹ค

์ธ๋ฑ์Šค๋ฅผ ๊ฑธ๊ธฐ ์ „์— ์‹ค์ œ ์‚ฌ์šฉ์„ ์…Œ๋‹ค.

$ grep -o "WHERE [a-z_]*_no = " /var/log/mysql/slow.log | sort | uniq -c | sort -rn
 122841 WHERE channel_order_no = 
  41022 WHERE order_no = 
   8820 WHERE payment_no = 

channel_order_no ๊ฐ€ order_no ๋ณด๋‹ค ์„ธ ๋ฐฐ ๋งŽ์ด ์“ฐ์˜€๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์‹ค์ œ ์“ฐ๋Š” ์ปฌ๋Ÿผ๊ณผ ๋‹ฌ๋ž๋‹ค.

์ฝ”๋“œ๋กœ ์ง์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‚˜๊ฐ€๋Š” ์กฐํšŒ๋ฅผ ์„ธ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ž๋‹ค. ๋ฐฐ์น˜์™€ ์—ฐ๋™์—์„œ ๋ถ€๋ฅด๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ์–ด์„œ๋‹ค.

๋ฌด์—‡์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์ง€๋Š” ์ด ์ˆซ์ž๊ฐ€ ์ •ํ•ด ์คฌ๋‹ค. ์ง์ž‘์œผ๋กœ ๊ฑธ์—ˆ์œผ๋ฉด ๋˜ order_no ๋ฅผ ์†๋ดค์„ ๊ฒƒ์ด๋‹ค.

ํŒ๋‹จ ๊ธฐ์ค€ โ€” ๊ฐ’์˜ ์„ฑ๊ฒฉ

๊ฑธ๊ธฐ ์ „์— ๊ทธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์–ด๋–ค ์„ฑ๊ฒฉ์ธ์ง€ ๋ดค๋‹ค.

SELECT COUNT(*), COUNT(DISTINCT channel_order_no) FROM orders;
4,218,441   4,102,882

COUNT(DISTINCT) ๊ฐ€ ์ „์ฒด์™€ ๋น„์Šทํ•ด ์ธ๋ฑ์Šค๋กœ ์ž˜ ๊ฐˆ๋ฆฐ๋‹ค. NULL ์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€๋„ ๋ดค๋‹ค.

SELECT COUNT(*) FROM orders WHERE channel_order_no IS NULL;
115,559

์ง์ ‘ ์ฃผ๋ฌธ์€ ์ฑ„๋„ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ์—†๋Š”๋ฐ NULL ์ด ๋งŽ์œผ๋ฉด ์ธ๋ฑ์Šค์˜ ์“ธ๋ชจ๊ฐ€ ์ค„์ง€๋งŒ 3%๋ผ ๊ดœ์ฐฎ์•˜๋‹ค.

๊ฐ’์ด ์•ˆ ๊ฐˆ๋ฆฌ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์–ด๋„ ํšจ๊ณผ๊ฐ€ ์ž‘๋‹ค. ๊ฑฐ๋Š” ๋น„์šฉ์€ ๊ฐ™์œผ๋ฏ€๋กœ ๊ฑธ๊ธฐ ์ „์— ์žฌ ๋ณด๋Š” ๊ฒƒ์ด ์ˆœ์„œ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ์ผ์€ ๋˜๋Œ๋ฆฌ๊ธฐ ์‰ฌ์›Œ ๋ณด์—ฌ์„œ ์ผ๋‹จ ๊ฑธ์–ด ๋ณด์ž๋Š” ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ธฐ ์‰ฝ๋‹ค. 400๋งŒ ๊ฑด์— 8๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๋ผ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค.

๊ฑฐ๋Š” ์‹œ๊ฐ„๊ณผ ์ง€์šฐ๋Š” ์‹œ๊ฐ„์ด ๋‘˜ ๋‹ค ๋“ค์–ด์„œ ์žฌ ๋ณด๊ณ  ๊ฑฐ๋Š” ์ชฝ์ด ๋‘ ๋ฒˆ ์ผํ•˜์ง€ ์•Š๋Š” ๊ธธ์ด์—ˆ๋‹ค.

์ฑ„๋„๊ณผ ๊ฐ™์ด ๊ฑธ์—ˆ๋‹ค

๊ฐ™์€ ์ฑ„๋„ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ์ฑ„๋„์— ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๊ฑธ๋ ธ๋‹ค.

SELECT channel_order_no, COUNT(DISTINCT channel) FROM orders
GROUP BY channel_order_no HAVING COUNT(DISTINCT channel) > 1 LIMIT 5;
ABC123   2

์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ๊ฐ’์ด ์žˆ์—ˆ๊ณ  ์ฑ„๋„ ์—†์ด ์ฐพ์œผ๋ฉด ๋‹ค๋ฅธ ์ฑ„๋„์˜ ์ฃผ๋ฌธ์ด ๋‚˜์˜จ๋‹ค.

CREATE INDEX ix_channel_order ON orders (channel, channel_order_no);

channel ์„ ์•ž์— ๋‘๊ณ  ํ•จ๊ป˜ ๊ฑธ์—ˆ๊ณ  ์กฐํšŒํ•˜๋Š” ์ชฝ ์ฝ”๋“œ๋„ ๊ณ ์ณค๋‹ค.

$this->db->where('channel', $channel)->where('channel_order_no', $no);

์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊น€์— ์กฐํšŒ ์ž์ฒด๊ฐ€ ํ‹€๋ ธ๋˜ ๊ฒƒ์„ ์ฐพ์•˜๋Š”๋ฐ ๋А๋ฆฌ๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด๋Ÿฌ ๊ฐ”๋‹ค๊ฐ€ ํ•˜๋‚˜๋ฅผ ๋” ๊ฑด์กŒ๋‹ค.

๋А๋ฆฐ ์กฐํšŒ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ๊ทธ ์กฐํšŒ๊ฐ€ ๋ฌด์—‡์„ ์ฐพ์œผ๋ ค๋Š” ๊ฒƒ์ธ์ง€๊นŒ์ง€ ์ฝ๊ฒŒ ๋œ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์กฐ๊ฑด์ด ๋ชจ์ž๋ž€ ๊ฒƒ์ด ๋ˆˆ์— ๋ˆ๋‹ค.

์„ฑ๋Šฅ ์ž‘์—…์ด ์ •ํ™•์„ฑ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ํ‰์†Œ ์•ˆ ์ฝ๋Š” ์ฟผ๋ฆฌ๋ฅผ ๊ทธ๋•Œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒ€์ฆ โ€” ์กฐํšŒ์™€ ์ž…๋ ฅ ์–‘์ชฝ

๊ฑธ๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ์Ÿ€๋‹ค.

EXPLAIN SELECT * FROM orders WHERE channel = 'A' AND channel_order_no = 'ABC123';
type: ref   key: ix_channel_order   rows: 1
์ „   1.8์ดˆ
ํ›„   0.002์ดˆ

type ์ด ref ๊ฐ€ ๋˜๊ณ  rows ๊ฐ€ 1์ด ๋๋Š”๋ฐ ์กฐํšŒ๋งŒ ๋ณด๊ณ  ๋๋‚ด๋ฉด ํŒ๋‹จ์ด ๋ฐ˜์ชฝ์ด๋‹ค.

์ „   INSERT ํ‰๊ท  1.2ms
ํ›„   INSERT ํ‰๊ท  1.4ms

์ธ๋ฑ์Šค๊ฐ€ ๋Š˜๋ฉด ๋„ฃ์„ ๋•Œ ์ผ์ด ๋Š˜์–ด 0.2๋ฐ€๋ฆฌ์ดˆ ๋Š˜์—ˆ๋Š”๋ฐ ์กฐํšŒ๊ฐ€ ์ค„์–ด๋“  ๊ฒƒ์— ๋น„ํ•˜๋ฉด ์ž‘์•˜๋‹ค.

ํ•œ์ชฝ๋งŒ ์žฌ๋ฉด ํŒ๋‹จ์ด ํ‹€๋ฆฌ๊ณ  ๊ฑฐ๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„๋„ 400๋งŒ ๊ฑด์— 8๋ถ„์ด๋ผ ์ƒˆ๋ฒฝ์— ์ž‘์—…ํ–ˆ๋‹ค.

์กฐํšŒ๊ฐ€ 900๋ฐฐ ๋นจ๋ผ์กŒ๋‹ค๋Š” ์ˆซ์ž๋งŒ ๋ณด๊ณ ํ•˜๋ฉด ๋“ฃ๋Š” ์ชฝ์€ ๊ณต์งœ๋กœ ๋ณด์ธ๋‹ค. ๋„ฃ๋Š” ์ชฝ์ด ์–ผ๋งˆ๋‚˜ ๋А๋ ค์กŒ๋Š”์ง€๋ฅผ ๊ฐ™์ด ์ ์–ด์•ผ ๊ทธ ๊ฑฐ๋ž˜๊ฐ€ ๋ณด์ธ๋‹ค.

์ด๋ฒˆ์—๋Š” ๊ทธ ๊ฑฐ๋ž˜๊ฐ€ ๋ช…๋ฐฑํžˆ ๋‚จ๋Š” ์ชฝ์ด์—ˆ์ง€๋งŒ ์žฌ ๋ณด๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ์•ˆ ์žฌ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค.

์ฃผ์˜ โ€” ์•ˆ ์“ฐ๋Š” ์ธ๋ฑ์Šค

๊ฑฐ๋Š” ๊น€์— ์•ˆ ์“ฐ๋Š” ๊ฒƒ๋„ ๋ดค๋‹ค.

SELECT * FROM sys.schema_unused_indexes WHERE object_schema = 'order';

์„ธ ๊ฐœ๊ฐ€ ๋‚˜์™”๊ณ  ํ•˜๋‚˜๋Š” ์ด๋ฏธ ์—†์–ด์ง„ ์˜› ํ™”๋ฉด์—์„œ ์“ฐ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

์ง€์šฐ๊ธฐ ์ „์— ๋ฉฐ์น  ๋” ๋ดค๋Š”๋ฐ ํ†ต๊ณ„๊ฐ€ ์žฌ์‹œ์ž‘์œผ๋กœ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ์–ด ํ•œ ๋ฒˆ ๋ณด๊ณ  ํŒ๋‹จํ•˜๋ฉด ํ‹€๋ฆฐ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ๊ณผ ์ง€์šฐ๋Š” ๊ฒƒ์€ ์œ„ํ—˜์ด ๋‹ค๋ฅด๋‹ค. ์ง€์šฐ๋Š” ์ชฝ์€ ํ‹€๋ฆฌ๋ฉด ์กฐํšŒ๊ฐ€ ์ „๋ถ€ ๋А๋ ค์ง„๋‹ค.

์ •๋ฆฌ


Share this post on:

Previous Post
๋‚˜๊ฐ€๋Š” ๊ธธ๊ณผ ๋Œ์•„์˜ค๋Š” ๊ธธ
Next Post
ํ•„๋“œ ํ•˜๋‚˜๊ฐ€ ๋Š˜์–ด์„œ ๋ฉˆ์ท„๋‹ค