Повратак на блог
Јануар 27, 2026Водичи

Како оптимизовати перформансе MySQL

Комплетан водич за оптимизацију перформанси базе података MySQL: подешавање конфигурације, оптимизација упита, индексирање и праћење.

Како оптимизовати перформансе MySQL

Оптимизација перформанси MySQL је кључна за апликације које рукују великим количинама података или високим саобраћајем. Овај водич покрива основне технике за побољшање перформанси MySQL, од подешавања конфигурације до оптимизације упита.

Оптимизација MySQL конфигурације

Уредите конфигурациони фајл MySQL да бисте оптимизовали перформансе на основу ресурса вашег сервера:

bash
# Уредите MySQL конфигурацију (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Уредите MySQL конфигурацију (CentOS/RHEL)
sudo nano /etc/my.cnf

# Додајте или модификујте ове поставке:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M

# Рестартујте MySQL
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld   # CentOS/RHEL

Оптимизација InnoDB

InnoDB је подразумевани MySQL мотор за складиштење. Оптимизујте га за боље перформансе:

bash
# У /etc/mysql/mysql.conf.d/mysqld.cnf или /etc/my.cnf
[mysqld]
# InnoDB buffer pool (користите 70-80% доступне RAM меморије)
innodb_buffer_pool_size = 2G

# Величина InnoDB лог фајла
innodb_log_file_size = 512M

# InnoDB flush метода (за SSD)
innodb_flush_method = O_DIRECT

# InnoDB I/O нити
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# InnoDB flush лог при commit трансакције
innodb_flush_log_at_trx_commit = 2

Конфигурација кеша упита

Кеш упита може побољшати перформансе за радне оптерећења интензивна по читању (Напомена: Кеш упита је застарео у MySQL 8.0):

bash
# За MySQL 5.7 и раније
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Проверите статус кеша упита
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Проверите статистике кеша упита
mysql> SHOW STATUS LIKE 'Qcache%';

Оптимизација индекса

Правилно индексирање је кључно за перформансе упита:

bash
# Анализирајте табелу да бисте ажурирали статистике индекса
ANALYZE TABLE table_name;

# Проверите некоришћене индексе
SELECT * FROM sys.schema_unused_indexes;

# Креирајте индекс
CREATE INDEX idx_column ON table_name(column_name);

# Креирајте композитни индекс
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Прикажите индексе
SHOW INDEXES FROM table_name;

# Обришите некоришћени индекс
DROP INDEX idx_name ON table_name;

Оптимизација упита

Оптимизујте ваше SQL упите за боље перформансе:

  • Користите EXPLAIN за анализу планова извршавања упита: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Избегавајте SELECT * - бирајте само потребне колоне
  • Користите LIMIT да ограничите резултатне скупове
  • Користите одговарајуће WHERE клаузуле са индексираним колонама
  • Избегавајте функције у WHERE клаузулама (нпр. WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Користите JOIN-ове уместо подупита када је могуће
  • Користите UNION уместо OR за више услова када је прикладно

Праћење перформанси MySQL

bash
# Проверите статус MySQL
mysql> SHOW STATUS;

# Проверите споре упите
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Омогућите лог спорих упита
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Проверите листу процеса
mysql> SHOW PROCESSLIST;

# Проверите статус табеле
mysql> SHOW TABLE STATUS LIKE 'table_name';

# Проверите InnoDB статус
mysql> SHOW ENGINE INNODB STATUS;

Савети за оптимизацију перформанси

  • Редовно покретајте OPTIMIZE TABLE да дефрагментујете табеле
  • Пратите лог спорих упита и оптимизујте споре упите
  • Користите pool веза да смањите оптерећење везе
  • Партиционирајте велике табеле по датуму или опсегу за боље перформансе
  • Користите реплике само за читање за радна оптерећења интензивна по читању
  • Држите MySQL ажуриран на најновију стабилну верзију
  • Пратите I/O диска и размотрите коришћење SSD/NVMe складишта
  • Користите EXPLAIN ANALYZE (MySQL 8.0+) за детаљну анализу упита