MATERI 6 - BOTTLENECK PADA MYSQL
Saya, Marinda Cahya P, dari Kelas 2B dengan nomor absen 16, menulis materi ini sebagai rangkuman dari Praktikum Instalasi dan Konfigurasi Server Database yang dilaksanakan pada tanggal 19 Maret 2025. Topik yang dibahas dalam praktikum ini adalah Optimasi Bottleneck dalam MySQL. Rangkuman ini disusun sebagai salah satu syarat untuk memenuhi tugas praktikum Mata Kuliah Sistem Manajemen Basis Data. Jika terdapat kesalahan dalam penulisan atau gambar yang kurang jelas, saya mohon maaf.
BOTTLENECK PADA MySQL
Latar Belakang
Bottleneck dalam MySQL adalah kondisi di mana kinerja database mengalami penurunan karena keterbatasan sumber daya atau masalah dalam eksekusi query. Penyebab utama bottleneck meliputi:
• Full table scan akibat tidak adanya indeks.
• Terlalu banyak koneksi database yang tidak dikelola dengan baik.
• Deadlock dalam transaksi akibat operasi yang tumpang tindih.
• Ukuran buffer pool yang kecil, menyebabkan MySQL sering membaca dari disk.
• Query yang tidak optimal, seperti penggunaan SELECT * yang mengambil semua kolom tanpa perlu.
Dengan memahami dan mengoptimalkan sumber bottleneck ini, kinerja database dapat ditingkatkan secara signifikan.
Permasalahan yang diangkat
- Bagaimana cara mengidentifikasi dan mengatasi bottleneck dalam MySQL?
- Bagaimana cara mengoptimalkan query agar lebih cepat dan efisien?
- Bagaimana cara memanfaatkan indeks untuk meningkatkan performa database?
- Bagaimana cara mengelola ukuran buffer pool untuk memaksimalkan efisiensi?
- Bagaimana pengaruh penggunaan query cache terhadap performa MySQL?
Skenario aktivitas
- Pembuatan dan pengelolaan indeks untuk mempercepat query.
- Penggunaan query cache untuk mengurangi beban query yang berulang.
- Pengaturan buffer pool size untuk mengoptimalkan akses ke disk.
- Pengujian performa query sebelum dan sesudah optimasi.
- Penerapan optimasi bottleneck pada database minimarket.
Pembahasan (Latihan Soal)
1. Jalankan setiap langkah dari materi diatas, tuliskan pemahaman anda.
- Create Tabel User
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
- Create Tabel Orders
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
STATUS VARCHAR(50),
total DECIMAL(10, 2),
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES users(id)
);
- Menambahkan Index
- Show Index
- Index pada Kolom Where
- Index pad akolom yang digunakan dalam join
- Index Multi-Kolom untuk query yang melibatkan beberapa kolom
- Mengevaluasi Efektivitas Indeks
EXPLAIN SELECT id, email FROM users WHERE nama = 'John';
- Menggunakan Query Cache
menggunakan MySQL 8.0, karena fitur ini sudah dihapus dan digantikan oleh InnoDB
Buffer Pool (seperti dibawah ini).
- Meningkatkan Ukuran Buffer Pool
- Indeks pada kolom WHERE
- Indeks pada kolom JOIN
- Indeks Multi-Kolom untuk query yang melibatkan beberapa kolom
SHOW INDEX FROM tr_penjualan_raw;
Pada Gambar tersebut menjelaskan tampilan indeks dengan Where, join, Indeks Multi-Kolom untuk query yang melibatkan beberapa kolom dengan query CREATE INDEX idx_kode_item ON tr_penjualan_raw (kode_item);
- Dengan menggunakan MySQL 8.0, karena fitur ini sudah dihapus dan digantikan oleh InnoDB Buffer Pool.
Pada Gambar tersebut merupakan hasil dari oleh InnoDB Buffer Pool dengan memori tot 8 GB.
SHOW ENGINE INNODB STATUS;
Pada Gambar tersebut menampilkan dengan memori total 8 GB dan akan memakai oleh InnoDB Buffer Pool size 4 GB atau setengah dari 8 GB(memori total)
- Query tr_penjualan_raw pada tahun 2014
- Melakukan Select data dalam tabel tr_penjualan_raw
SELECT * FROM tr_penjualan_raw
SELECT * FROM tr_penjualan_raw WHERE kode_item IN ('ITEM1', 'ITEM2', 'ITEM3', ...,'ITEM500');
- Select data dari tabel tr_penjualan_raw
SELECT * FROM tr_penjualan_raw
WHERE kode_item IN (
'ITM-038', 'ITM-020', 'ITM-017', 'ITM-007', 'ITM-015',
'ITM-006', 'ITM-035', 'ITM-034', 'ITM-022', 'ITM-021',
'ITM-005', 'ITM-012', 'ITM-009', 'ITM-031'
- Create Index pada tabel tr_penjualan_raw
- Melakukan Select data dalam tabel tr_penjualan_raw
SELECT * FROM tr_penjualan_raw
WHERE kode_item IN ('ITM-038', 'ITM-020', 'ITM-017', 'ITM-007', 'ITM-015',
'ITM-006', 'ITM-035', 'ITM-034', 'ITM-022', 'ITM-021',
'ITM-005', 'ITM-012', 'ITM-009', 'ITM-031'
Pada Gambar Diatas merupakan tabel tr_penjualan_raw yang sudah di berikan index, dengan tahun yang sudah ditentukan yakni ITM-038', 'ITM-020', 'ITM-017', 'ITM-007', 'ITM-015', 'ITM-006', 'ITM-035', 'ITM-034', 'ITM-022', 'ITM-021', 'ITM-005', 'ITM-012', 'ITM-009', 'ITM-031';5. Query berikut apakah sudah optimal?? Jika belum, lakukan optimasi
SELECT * FROM tr_penjualan_raw WHERE nama_kasir LIKE ‘Sari';- Select data tabel tr_penjualan_raw
- Lalu Mengupdate data dengan query berikut
- Select data dari tabel kolom tr_penjualan_raw
SELECT MAX(harga) FROM tr_penjualan_raw WHERE kode_cabang = 'CB001';
- Update data
- Select max
- Select data
Kesimpulan
- Indeks sangat penting untuk mempercepat query, terutama pada kolom yang sering digunakan dalam WHERE dan JOIN.
- Query cache dapat membantu mempercepat eksekusi ulang query yang sering digunakan.
- Buffer pool yang lebih besar mengurangi akses ke disk, meningkatkan efisiensi database.
- Menghindari SELECT * membuat query lebih cepat dan efisien.
- Pengujian dengan EXPLAIN sangat berguna untuk mengetahui apakah query sudah dioptimalkan dengan baik.
- Dengan menerapkan teknik optimasi bottleneck ini, database MySQL dapat berjalan lebih efisien, mengurangi waktu eksekusi query, dan meningkatkan kapasitas penanganan data dalam jumlah besar.

















Komentar
Posting Komentar