Notice
Recent Posts
Recent Comments
Link
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- hyperledger
- ํ๋ก๊ทธ๋๋ฐ
- javascript ์ด๊ธ
- javascript ๊ฒ์
- ์ ๋ก์ด
- hyperledger fabric
- ๋ธ๋ก์ฒด์ธ
- DataStructure
- Nodejs ํ๋ก์ ํธ
- ์ปดํจํฐ๊ณตํ๊ฐ๋ก
- javascirpt
- ์ปดํจํฐ์ฌ์ด์ธ์ค
- vs code
- algorithum
- mysql
- nodejs
- Blockmonkey
- ์ํ์ฝ๋ฉ
- ๋ธ๋ก์ฒด์ธ๊ฐ๋ก
- ๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค
- SQL
- al
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- js
- ํ์ดํผ๋ ์
- ๋ธ๋ก๋ชฝํค
- Javascript
- ์ํ์ฝ๋ฉ nodejs
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๊น
Archives
- Today
- Total
Blockmonkey
[DB] Slow Query ๋ณธ๋ฌธ
๐๐ปโ๏ธ Outline
- ์ฌ๋ก์ฐ์ฟผ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ์์ธ๊ณผ ํด๊ฒฐ๋ฐฉ์์ ๋ํด ์์๋ณผ ๊ฒ.
๐ฏ Research Objective
- [x] ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ์ ์ํ ์ ์๋ค.
- [x] ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๋ํ์ ์ธ ์์ธ์ ํ์ ํ ์ ์๋ค.
- [x] ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ ๋ํด ์ ์ ์๋ค.
๐ง ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ (Slow Query)๋ ?
- ์๋ต์๋๊ฐ ๋๋ฆฐ SQL ์ฟผ๋ฆฌ
- DB ์ฒ๋ฆฌ ์๊ฐ ๋๋ ์ ์ฒด ์๋ต์๊ฐ์ด ๊ธฐ์ค์น ์ด์์ธ ๊ฒฝ์ฐ ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๋ผํจ.
๐ง ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ์ฃผ์ ๋ฐ์ ์์ธ
- ์ธ๋ฑ์ค X || ์๋ชป๋ ์ธ๋ฑ์ค (์ธ๋ฑ์ค ๋ฌธ์ )
- ๊ณผ๋ํ JOIN ์ฌ์ฉ (JOIN ๋ฌธ์ )
- Row๊ฐ ๋ง์ ํ ์ด๋ธ์์ limit ์์ด ์คํ (ํ์ด์ง ์ฒ๋ฆฌ ๋ถ์ฌ)
- ํธ๋์ญ์ ๋ฝ ๋๊ธฐ || ์ถฉ๋ (ํธ๋์ญ์ ๋ฝ ๋ฌธ์ )
- N+1 ๋ฌธ์
๐ง ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ํด๊ฒฐ๋ฐฉ์
- ์ธ๋ฑ์ค ๋ฌธ์ →
- ์ ์ ํ ์ธ๋ฑ์ค ์ฌ์ฉ ๋ฐ ๊ณผ๋ํ ์ธ๋ฑ์ค ์ฌ์ฉ X
- Covering Index์ ์ ์ ํ ํ์ฉ
- ์ฟผ๋ฆฌํ๋ ์กฐํ๋ฅผ ํตํด ์กฐํํด ์์ธ ๋ถ์ํด๋ณด์
- JOIN ๋ฌธ์ →
- ๊ณผ๋ํ ํ ์ด๋ธ JOIN์ ์ฌ์ฉํ์ง ๋ง๊ณ , ๋ฌด์กฐ๊ฑด ํ ์ฟผ๋ฆฌ์์ ๋๋ธ๋ค๋ ์๊ฐ์ ๋ฒ๋ฆฌ์.
- Row๊ฐ ๋ง์ ํ
์ด๋ธ ์ฟผ๋ฆฌ ์,
- ํ์ด์ง ์ฒ๋ฆฌ(LIMIT, OFFSET)๊ฐ ํ์์ ์ด๋ค.
- ํธ๋์ญ์
๋ฝ (๋น๊ด์ ๋ฝ)์ ์ฌ์ฉ๋ณด๋ค๋
- ๋๊ด์ ๋ฝ์ ์ฌ์ฉํด, ํธ๋์ญ์ ๋ฝ ๋๊ธฐ๋ฅผ ์ต์ํ ํ ๊ฒ.
- N+1 ๋ฌธ์ →
- ์ ์ ํ LazyLoading & Fetch Join์ ํ์ฉ
๐ง ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ชจ๋ํฐ๋ง ๋ฐฉ์
- ๊ธฐ๋ณธ์ ์ผ๋ก DBMS๋ ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ์ ๋ํ์ฌ mysql.slow_log ์ ์ ์ฅํจ.
- SELECT * FROM mysql.slow_log; ์ ๊ธฐ๋ก
- ๋ง์ฝ, ์์ ์ SHOW VARIABLES LIKE '%slow%'; ๋ก log_slow_query๊ฐ OFF ์ํ์ธ์ง ํ์ธํ๊ณ ํ์ฑํ ํ์.
- Spring Boot AOP ๊ธฐ๋ฐ ๋ชจ๋ํฐ๋ง
- p6spy๋ฅผ ๋ฌ๋ฉด, 1์ด ์ด์ ๊ฑธ๋ฆฐ ๊ฒฝ์ฐ ํํฐ๋ง ๋์ ๋ก๊ทธ ๋จ๊น
# [GRADLE] P6Spy์ฉ ๋๋ผ์ด๋ฒ ์ฌ์ฉ
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
# [spy.properties] ์๋ ์ต์
์ถ๊ฐ
# ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ก๊น
๋ง ๋จ๊ธฐ๊ณ ์ถ์ ๋ (1์ด์ด์ ๋ก๊ทธ๋ง ๋จ์)
appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=Execution Time: %(executionTime)ms | SQL: %(sqlSingleLine)
executionThreshold=1000
๐ Conclusion
- ์ฌ๋ก์ฐ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ก, ์ ํด๊ฒฐ๋ฐฉ์์ ์ค์ํด์ ์ฝ๋ ์งค ๊ฒ.
- ๋ง์ฝ ๋ฐ์ ์, ๋ชจ๋ํฐ๋ง ๋ฐฉ์์ ์ฑํํ์ฌ ์ ์ฉํ๊ณ ํด๊ฒฐํ ๊ฒ.
๐ References
'Web Development > Back-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [DB] B-Tree vs B+Tree (0) | 2025.09.22 |
|---|---|
| [Java] String & String Builder & StringBuffer (0) | 2025.09.11 |
| EKS - ํ๊ฒฝ๋ณ์ ๊ด๋ฆฌ (1) | 2025.07.21 |
| EKS - Context (0) | 2025.07.21 |
| EKS ์ฌ์ฉํ๊ธฐ (3) | 2025.07.21 |