MySQL ๋ ˆ์ฝ”๋“œ ๋ฝ ํ™•์ธ ์ฟผ๋ฆฌ๋“ค

MySQL์˜ performance_schema.data_locks์™€ performance_schema.data_lock_waits ํ™œ์šฉ ์˜ˆ์‹œ MySQL์˜ performance_schema.data_locks์™€ performance_schema.data_lock_waits ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ์„ ์กฐํšŒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ˆ์‹œ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌ. performance_schema.data_locks์™€ performance_schema.data_lock_waits ๊ฐœ์š” data_locks: ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๋ชจ๋“  ๋ฝ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ด๋ธ” data_lock_waits: ํŠธ๋žœ์žญ์…˜์ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฝ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ…Œ์ด๋ธ” (Deadlock ๊ฐ€๋Šฅ์„ฑ ๋ถ„์„) 1. ๊ธฐ๋ณธ์ ์ธ ๋ฝ ์ •๋ณด ์กฐํšŒ SELECT * FROM performance_schema.data_locks; โœ… ๊ฒฐ๊ณผ ์˜ˆ์‹œ ENGINE OBJECT_SCHEMA OBJECT_NAME INDEX_NAME LOCK_TYPE LOCK_MODE LOCK_STATUS INNODB mydb users PRIMARY RECORD X GRANTED INNODB mydb orders NULL TABLE IX GRANTED LOCK_TYPE: TABLE, RECORD, AUTO_INC ๋“ฑ LOCK_MODE: X(Exclusive), S(Shared), IX(Intent Exclusive), IS(Intent Shared) LOCK_STATUS: GRANTED, WAITING 2....

February 27, 2025

RealMySql 8.0

MySQL ์•„ํ‚คํ…์ฒ˜ MySQL ์—”์ง„ ๊ด€๋ จ ๊ธฐ๋ณธ ํ•ธ๋“ค๋Ÿฌ, ์—”์ง„, ์Šคํ† ๋ฆฌ์ง€์—”์ง„, ํ•˜๋“œ์›จ์–ด๋กœ ์ด๋ฃจ์–ด์ง ์Šค๋ ˆ๋”ฉ: ํฌ์–ด๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ(ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ)์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ MyISAM์€ ํด๋ผ์ด์–ธํŠธ์Šค๋ ˆ๋“œ๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ: ๊ธ€๋กœ๋ฒŒ์˜์—ญ๊ณผ ํด๋ผ์ด์–ธํŠธ ๋กœ์ปฌ ๊ธ€๋กœ๋ฒŒ : ํ…Œ์ด๋ธ” ์บ์‹œ, ๋ฒ„ํผํ’€, ํ•ด์‹œ์ธ๋ฑ์Šค, ๋ฆฌ๋‘๋กœ๊ทธ ๋ฒ„ํผ ๋กœ์ปฌ : ์ปค๋„ฅ์…˜, ์ •๋ ฌ๋ฒ„ํผ, ์กฐ์ธ ๋ฒ„ํผ ๊ฐ ํ•˜์œ„ ์ž‘์—…์ด MySQL ์—”์ง„ ์˜์—ญ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์˜์—ญ์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ SQL ์š”์ฒญ -> (MySQL ์—”์ง„์—์„œ) ์ฟผ๋ฆฌํŒŒ์„œ -> ์ „์ฒ˜๋ฆฌ๊ธฐ -> ์˜ตํ‹ฐ๋งˆ์ด์ €(์ฟผ๋ฆฌ ๋ณ€ํ™˜, ๋น„์šฉ ์ตœ์ ํ™”, ์‹คํ–‰ ๊ณ„ํš ์ˆ˜๋ฆฝ) -> ์ฟผ๋ฆฌ์‹คํ–‰๊ธฐ (์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ์‹คํ–‰)...

February 27, 2025

b+ tree on kotlin

B+ ํŠธ๋ฆฌ ๊ตฌํ˜„ 1. ๊ธฐ๋ณธ ๊ตฌ์กฐ ๊ตฌํ˜„ ๋…ธ๋“œ(Node)์™€ ํŠธ๋ฆฌ(BPlusTree) ๊ตฌ์กฐ์ฒด ์ •์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ (K: Ord, V) Box, Rc, RefCell์„ ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž (new) ๊ตฌํ˜„ ํŠธ๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ (is_empty) 2. ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋‹จ์ผ ํ‚ค ๊ฒ€์ƒ‰ ๋ฉ”์„œ๋“œ (search) ์ด์ง„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•œ ํ‚ค ์ฐพ๊ธฐ ๋‚ด๋ถ€ ๋…ธ๋“œ ํƒ์ƒ‰ ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ ๊ฐ’ ์ฐพ๊ธฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ 3. ์‚ฝ์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„ insert ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์ฒซ ๋…ธ๋“œ ์ƒ์„ฑ ์ฒ˜๋ฆฌ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฐพ๊ธฐ ๋ฆฌํ”„ ๋…ธ๋“œ์— ํ‚ค-๊ฐ’ ์Œ ์‚ฝ์ž… ๋…ธ๋“œ ๋ถ„ํ•  (split) ๊ตฌํ˜„ ๋ถ„ํ•  ์‹œ์  ๊ฒฐ์ • (order ๊ธฐ๋ฐ˜) ๋ฆฌํ”„ ๋…ธ๋“œ ๋ถ„ํ•  ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ถ„ํ•  ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ํ‚ค ์ „ํŒŒ ๋ฃจํŠธ ๋…ธ๋“œ ๋ถ„ํ•  ์ฒ˜๋ฆฌ ๋ฆฌํ”„ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ 4....

February 11, 2025

Rust๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฉ๋ก ์ž๋ฃŒ๊ตฌ์กฐ ๋ชฉ๋ก [[Kotlin-B-Plus-Tree]]

February 11, 2025

์Šคํ”„๋ง ๋ถ€ํŠธ ๊ด€๋ จ ๐ŸŒฟ

ํ† ๋น„์˜ ์Šคํ”„๋ง ๊ด€์‹ฌ์‚ฌ โ€œ๋ชจ๋“  ๋ณ€๊ฒฝ๊ณผ ๋ฐœ์ „์€ ํ•œ๊ฐ€์ง€ ๊ด€์‹ฌ์— ์ง‘์ค‘ํ•ด์„œ ์ผ์–ด๋‚œ๋‹ค. ๋ฌธ์ œ๋Š” ๋‹ค๋งŒ ๊ทธ์— ๋”ฐ๋ฅธ ๋ณ€๊ฒฝ์ด ํ•œ๊ฐ€์ง€ ๊ด€์‹ฌ์— ์ง‘์ค‘ํ•ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€, ํ•œ๊ฐ€์ง€ ๊ด€์‹ฌ์ด ํ•œ๊ตฐ๋ฐ ์ง‘์ค‘๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.โ€ ๊ด€๊ณ„ ๋ชจ๋ธ๋ง ์‹œ์ ์˜ ์˜ค๋ธŒ์ ํŠธ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋Ÿฐํƒ€์ž„ ์˜ค๋ธŒ์ ํŠธ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š”๊ฒƒ์€ โ€œํด๋ผ์ด์–ธํŠธ์˜ ์ฑ…์ž„"์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ž๊ธฐ๊ฐ€ UserDao๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ž…์žฅ์ด๊ธฐ์—, UserDao์˜ ์„ธ๋ถ€ ์ „๋žต์ด๋ผ๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์„ ํƒํ•œ ํด๋ž˜์Šค์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์—ฐ๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. OCP ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์€ ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค....

February 4, 2025

Coding Interview SQL

197. Rising Temperature LeetcodeLink ์ฒ˜์Œ์ฟผ๋ฆฌ 2000ms select W1.id from Weather W1 join Weather W2 on DATEDIFF(W1.recordDate, W2.recordDate) = 1 where W1.temperature > W2.temperature; ์ธ๋ฑ์Šค ํƒ€๋„๋ก ๊ฐœ์„  800ms select W1.id from Weather W1 join Weather W2 on W1.recordDate = W2.recordDate + INTERVAL 1 DAY where W1.temperature > W2.temperature; ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฟผ๋ฆฌ๋“ค๋„ ๋ดค๋Š”๋ฐ, ๋‚ ์งœ ์ œํ•œ๊ฐ™์€ ํŽธ๋ฒ•๋“ค์„ ์ด์šฉํ•œ๊ฑฐ ์™ธ์—๋Š” ๊ณ ์„ฑ๋Šฅ ์ฟผ๋ฆฌ๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์…€ํ”„์กฐ์ธ์ด๋‚˜ ์…€ํ”„์กฐ์ธ๊ณผ ๋‹ค๋ฆ„์—†๋Š” ์ฟผ๋ฆฌ๋“ค๊ณผ ๋น„์Šทํ•œ ๋งฅ๋ฝ 1661. Average Time of Process per Machine LeetcodeLink...

February 3, 2025

์ฝ”ํ‹€๋ฆฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๊ฐ„๋‹จ ์ •๋ฆฌ

์ฝ”ํ‹€๋ฆฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ ์ฑ…๊ณผ ์ฝ”๋“œ์Šคํ”ผ์ธ  ์œ ํŠœ๋ธŒ ์Šคํ„ฐ๋”” ์˜์ƒ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ๊ฐ์„ ์ •๋ฆฌํ•œ ๋ฌธ์„œ (์ธ์šฉ ํƒœ๊ทธ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ…์ŠคํŠธ๋“ค์€ ์Šคํ„ฐ๋”” ๋‚ด์šฉ์„ ํ•„์‚ฌํ•˜๊ฑฐ๋‚˜, ์ฑ…์—์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.) ์ถœ์ณ : ์ฝ”ํ‹€๋ฆฐ์™„๋ฒฝ๊ฐ€์ด๋“œ, ์ฝ”๋“œ์Šคํ”ผ์ธ  ์œ ํŠœ๋ธŒ ์˜์ƒ 7์žฅ ์ปฌ๋ ‰์…˜๊ณผ I/O ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ Iterable โ€œ์ผ๋ฐ˜์ ์œผ๋กœ ์ฆ‰์‹œ(eager) ๊ณ„์‚ฐ๋˜๋Š” ์ƒํƒœ๊ฐ€ ์žˆ๋Š”(stateful) ์ปฌ๋ ‰์…˜โ€ ๊ทธ ์™ธ์—๋Š” java์™€ ๋™์ผ Comparable๊ณผ Comparator compareTo() : ์ž๋ฐ”์™€ ๋™์ผ, ์ˆ˜์‹ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ๋Œ€๋ฐฉ ์ธ์Šคํ„ด์ˆ˜๋ณด๋‹ค ํฌ๋ฉด ์–‘์ˆ˜, ๊ฐ™์œผ๋ฉด 0 compareBy() : ๋น„๊ต ๊ฐ€๋Šฅ ๊ฐ์ฒด๋ฅผ ์ œ๊ณต ์ปฌ๋ ‰์…˜ ์ƒ์„ฑ ~Of() ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ...

January 27, 2025

PostMessage๋ฅผ ์ด์šฉํ•ด์„œ ๋ณธ์ธ์ธ์ฆ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๐Ÿ›Ÿ

Intro ๐Ÿ‘‹ ๋ฐฐ๊ฒฝ : ๋ณธ์ธ์ธ์ฆ ์„œ๋น„์Šค ๋ฆฌ๋‰ด์–ผํ•˜๋Š” ํƒœ์Šคํฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค. AS-IS ์ˆ˜๋„์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ๊ธฐ์กด ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฑ์—”๋“œ ๋กœ์ง์€ ์˜ˆ๋ฏผํ•  ์ˆ˜ ์žˆ์–ด ์ •๋ง ์ตœ์†Œํ•œ์˜ ์ˆ˜๋„์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ–ˆ๋‹ค. ๋ณธ์ธ์ธ์ฆ ์‹œ์ž‘์  <button name='๋ณธ์ธ์ธ์ฆ ๋ฒ„ํŠผ' onClick=doAuth() /> <script> function doAuth() { window.afterCallback = afterCallbackFunc; // ์œˆ๋„์šฐ๊ฐ์ฒด์— ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‚ฝ์ž… window.open('authWindow', '/PhoneAuth') ; // ๋ณธ์ธ์ธ์ฆ ์ฐฝ ์—ด์–ด์ฃผ๊ธฐ } </script> ๋จผ์ € callbackํ•จ์ˆ˜๋ฅผ ์œˆ๋„์šฐ๊ฐ์ฒด์— ์‹ฌ๋Š”๋‹ค. callbackํ•จ์ˆ˜ ๋‚ด๋ถ€์—๋Š” ๋ณธ์ธ์ธ์ฆ ์ดํ›„์— ํ•  ํ–‰๋™๋“ค(ํšŒ์›๊ฐ€์ž…๊ด€๋ จ ๊ฒ€์ฆ api๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋˜๊ฐ€, ๋‹จ์ˆœ ์ธ์ฆ์™„๋ฃŒํ›„ ํŽ˜์ด์ง€ ์ด๋™์ด๋ผ๋˜๊ฐ€) ์ด ์ •์˜๋˜์–ด์žˆ๋‹ค....

January 22, 2025

๋ ˆ๊ฑฐ์‹œ ๊ฒฐ์ œ ์„œ๋น„์Šค ๋ฆฌ๋‰ด์–ผ, ๋ชจ๋“  pg ์„œ๋น„์Šค ์—ฐ๋™ ๊ฐœ๋ฐœ ํšŒ๊ณ  ๐Ÿ’ธ

์ด๊ฑธ ์ „๋ถ€ ๋‚ด๊ฐ€ ํ–ˆ๋‹ค๊ณ .. ์Šค์Šค๋กœ ๋ฟŒ๋“ฏํ•ด์„œ ์“ฐ๋Š” ํ›„๊ธฐ

January 21, 2025

์นดํ”„์นด๋ฅผ ํ—ฅ์‚ฌ๊ณ ๋‚ ํ•˜๊ฒŒ ํด๋ก ์ฝ”๋”ฉ ํ•ด๋ณด๊ธฐ

Intro! ์นดํ”„์นด๋ฅผ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ† ๋Œ€๋กœ ํด๋ก ์ฝ”๋”ฉ ํ•ด๋ดค๋‹ค. ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ Start with Codecrafters ๋จผ์ € ์ฝ”๋“œํฌ๋ž˜ํ”„ํ„ฐ์Šค๋ผ๋Š” ์‚ฌ์ดํŠธ์˜ ๋„์›€์„ ๋ฐ›์•˜๋‹ค. ํ•ด๋‹น ์‚ฌ์ดํŠธ๋Š” ์œ„์ฒ˜๋Ÿผ ํŠน์ • ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ ์ฃผ๊ณ , ํ•ด๋‹น ๊ตฌํ˜„ ๋‹จ๊ณ„๋งˆ๋‹ค ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„์„ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•˜๊ณ  ์š”์•ฝํ•ด์„œ ์ œ๊ณตํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค. ๋‹ค๋งŒ ์š”์ฒญ/์‘๋‹ต์„ ์‹ค์ œ ํ•ด๋‹น ๊ธฐ์ˆ ์ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด์„œ ์ง„ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์š”์ฒญ ์˜ˆ์‹œ, ์‘๋‹ต ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์‹ค์ œ ์š”์ฒญ๋„ ๋ฐ”์ดํŠธ ๋ฒ„ํผ๋กœ ์˜ค๊ณ , ์‘๋‹ต๋„ ๋ฐ”์ดํŠธ ๋ฒ„ํผ๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ ๋ณด๋‚ด์•ผํ•œ๋‹ค. ๋‹ค๋งŒ ๋ฌธ์ œ๋Š” ์•„์ง ์นดํ”„์นด๋Š” ๋ฒ ํƒ€๋กœ ์ง€์›ํ•˜๋Š”์ค‘์ด๋ผ, ์ ˆ๋ฐ˜์ •๋„๋งŒ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค....

January 19, 2025