| Version 11 (modified by , 2 weeks ago) ( diff ) |
|---|
Складирање на податоци и структури
Теоретска позадина
InnoDB vs MyISAM
Tablespaces
Tablespaces се логички контејнери што ги чуваат табелите и индексите:
Постојат два главни типа:
- System Tablespace: Една голема, централна датотека (ibdata1) каде InnoDB ги чува сите табели, индекси и системски податоци (како data dictionary и undo logs). Ова е потешко за управување.
- File-per-table: Ова е модерниот и препорачан пристап). Со оваа поставка, секоја табела што ја креираме (заедно со нејзините индекси) се складира во своја посебна .ibd датотека. На пример, табелата booking би била во booking.ibd.
Зошто е важно? Управување со простор. Со file-per-table, кога ќе избришеме (DROP) табела, едноставно ја бришеме нејзината .ibd датотека и просторот на дискот веднаш се ослободува.
Pages / Blocks
Page (или block) е најмала единица што InnoDB ја чита или запишува на диск.
Default големина: 16 KB.
- 4KB - Премногу мал (многу I/O операции)
- 8KB - Добар, но може подобро
- 16KB - за општа употреба
- 32KB - Премногу голем за многу workload-и
- 64KB - Преголем overhead
Кога би користел 4KB pages?
- Типично за OLTP системи (Online Transaction Processing)
- Примери: банкарство, резервации, веб апликации со многу UPDATE/INSERT операции.
Кога би користел 32KB pages?
- Типично за OLAP системи (Online Analytical Processing)
- Примери: системи за известување, аналитика, data warehouse.
Кога се чита ред од табела, InnoDB не чита само тој ред, ја чита целата страница што го содржи. Сите операции (INSERT, UPDATE, DELETE) се изведуваат на ниво на страници. Пример: Ако читаме еден ред од 1KB, MySQL ќе прочита цела page од 16KB
Extents
Extent е група од 64 последователни pages.
Големина: 64 pages = 64 × 16KB = 1MB
Extents се користат за ефикасно управување со простор: наместо да се алоцира страница по страница, InnoDB резервира по цел “extent”.
Segment: Група од extents за специфичен објект (табела/индекс).
Пример: Ако се создава нова табела, InnoDB ќе ѝ додели 1 extent (1MB) простор, кој потоа постепено се пополнува со податоци.
Како функционира заедно:
Табела (во tablespace)
↓
Segment (група extents)
↓
Extent (1MB = 64 pages)
↓
Page (16KB)
↓
Rows/Index entries
