์ƒ์„ฑ๋œ ์—ด์„ ์ง€์›ํ•˜๋Š” DBMS SQLite 3.31 ์ถœ์‹œ

๊ฒŒ์‹œ ๋จ ์„๋ฐฉํ•˜๋‹ค SQLite 3.31.0, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„ค๊ณ„๋œ ๊ฒฝ๋Ÿ‰ DBMS์ž…๋‹ˆ๋‹ค. SQLite ์ฝ”๋“œ๋Š” ๊ณต๊ฐœ ๋„๋ฉ”์ธ์œผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ๋“  ์ œํ•œ ์—†์ด ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SQLite ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์žฌ์ • ์ง€์›์€ Adobe, Oracle, Mozilla, Bentley ๋ฐ Bloomberg์™€ ๊ฐ™์€ ํšŒ์‚ฌ๋ฅผ ํฌํ•จํ•˜๋Š” ํŠน๋ณ„ํžˆ ๋งŒ๋“ค์–ด์ง„ ์ปจ์†Œ์‹œ์—„์„ ํ†ตํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ:

  • ์ถ”๊ฐ€ ์ง€์› ์ƒ์„ฑ๋œ ์—ด (๊ณ„์‚ฐ๋œ ์—ด) - ๋‹ค๋ฅธ ์—ด์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์ด ์ž๋™์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ ์—ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์—ด์€ ๊ฐ€์ƒ(์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค ์ฆ‰์‹œ ์ƒ์„ฑ๋จ)์ด๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ด€๋ จ ์—ด์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์ €์žฅ๋จ). ์ƒ์„ฑ๋œ ์—ด์˜ ๋‚ด์šฉ์€ ์ฝ๊ธฐ ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ณ„์‚ฐ๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์—ด์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

    ํ…Œ์ด๋ธ” ์ƒ์„ฑ t1(
    ์ •์ˆ˜ ๊ธฐ๋ณธ ํ‚ค,
    b INT,
    c ํ…์ŠคํŠธ,
    d INT๋Š” ํ•ญ์ƒ (a*abs(b)) VIRTUAL๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    e ํ…์ŠคํŠธ๋Š” ํ•ญ์ƒ (substr(c,b,b+1)) ์ €์žฅ๋จ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    );

  • ํ”„๋ผ๊ทธ๋งˆ(Pragma)๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”_์Šคํ‚ค๋งˆ, ์„ค์ • SQLITE_DBCONFIG_TRUSTED_SCHEMA ๋ฐ ์–ด์…ˆ๋ธ”๋ฆฌ ์˜ต์…˜ "-DSQLITE_TRUSTED_SCHEMA"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ํฌํ•จ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ˆ˜์ •์„ ํ†ตํ•ด. ํ™œ์„ฑ ๋ณดํ˜ธ๋Š” ํŠธ๋ฆฌ๊ฑฐ, ๋ทฐ, CHECK ๋ฐ DEFAULT ๋ฌธ, ์ธ๋ฑ์Šค ๋ฐ ์ƒ์„ฑ๋œ ์—ด์—์„œ SQL ํ•จ์ˆ˜(SQLITE_INNOCUOUS๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ)์˜ ์‚ฌ์šฉ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. SQLITE_VTAB_INNOCUOUS ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๋Š” ํ•œ ํŠธ๋ฆฌ๊ฑฐ ๋ฐ ๋ทฐ์—์„œ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ •์˜๋œ SQL ํ•จ์ˆ˜์— ์†์„ฑ์„ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. SQLITE_INNOCUOUS (์™ธ๋ถ€ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์•…์˜์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌดํ•ดํ•œ ๊ธฐ๋Šฅ) ๋ฐ SQLITE_DIRECTONLY (ํŠธ๋ฆฌ๊ฑฐ, ๋ณด๊ธฐ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ ์—†์ด SQL ์ฟผ๋ฆฌ์—์„œ ์ง์ ‘ ํ˜ธ์ถœ๋งŒ ๊ฐ€๋Šฅ)
  • ๋ชจ๋“ˆ ์ถ”๊ฐ€ uuid UUID ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„(RFC-4122)
  • ํ”„๋ผ๊ทธ๋งˆ(Pragma)๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. hard_heap_limit ๋ฐ ๊ธฐ๋Šฅ sqlite3_hard_heap_limit64() ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ผ๊ทธ๋งˆ์—์„œ ํ•จ์ˆ˜_๋ชฉ๋ก ๊ฐ ํ•จ์ˆ˜์˜ ์œ ํ˜•, ์†์„ฑ ๋ฐ ์ธ์ˆ˜ ์ˆ˜์— ๋Œ€ํ•œ ์ถœ๋ ฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ํ…Œ์ด๋ธ” DBSTAT๋กœ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„ ๋ชจ๋“œ;
  • sqlite3_open_v2()๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์—ด๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” SQLITE_OPEN_NOFOLLOW ์˜ต์…˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ผ์Ÿ์„ ์œ„ํ•ด PATH, JSON ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๊ณ  "#-N" ๋ฐฐ์—ด ํ‘œ๊ธฐ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ„๋ฐฐ ์‹œ์Šคํ…œ์—์„œ ๋ˆˆ์น˜์ฑ„๋‹ค ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ๋ฉ”๋ชจ๋ฆฌ ํ’€์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ๋ธ”๋ก์„ ํ• ๋‹นํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ ์—ฐ๊ฒฐ์— ํ• ๋‹น๋œ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ 120์—์„œ 48๋กœ ์ค„์ด๋ฉด์„œ Lookaside ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. KB);
  • PRAGMA ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋ ˆ๊ฑฐ์‹œ_ํŒŒ์ผ_ํ˜•์‹VACUUM, ์ƒ์„ฑ๋œ ์—ด ๋ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ธ๋ฑ์Šค์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋ ˆ๊ฑฐ์‹œ ํ˜•์‹ ์ง€์›์€ sqlite3_db_config()์˜ SQLITE_DBCONFIG_LEGACY_FILE_FORMAT ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ์Œ).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€