QTS Database Management

Introduction to Database Administration - WEEK 1

Definisi Database Administration (DBA)

Keseluruhan aktivitas teknis yang dilakukan oleh seorang Database Administrator (DBA) untuk memastikan bahwa database selalu menyala, tersedia, aman, dan beroperasi optimal saat dibutuhkan oleh sistem.

Tugas mencakup database security (keamanan), monitoring (pemantauan), troubleshooting (pemecahan masalah), dan planning for future growth (perencanaan kapasitas data di masa depan).

Peran DBA (The Roles of DBA)

Tanggung jawab utama mencakup maintenance (pemeliharaan), securing (pengamanan), dan mengoperasikan database.

DBA wajib memastikan data tersimpan dan ditarik dengan presisi, bekerja sama dengan tim developer (pengembang) untuk merancang fitur sistem, dan harus paham betul kebutuhan teknis maupun bisnis perusahaan.

Tipe-tipe DBA (The Types of DBA)

  1. System Administrators: Mengelola sistem komputer secara keseluruhan, instalasi, dan patch keamanan.
  2. Database Architects: Merancang arsitektur database sesuai kebutuhan spesifik organisasi.
  3. Database Analysts: Menganalisis data untuk menemukan tren dan pola.
  4. Application DBA: Berfokus pada pengelolaan database untuk aplikasi spesifik.
  5. Task-oriented DBA: Berfokus pada tugas khusus seperti pencadangan (backup) atau pemulihan (recovery).
  6. Performance Analyst: Fokus memantau dan menyetel (tuning) performa database.
  7. Data Warehouse Administrator: Mengelola gudang data raksasa (Data Warehouse).

Evolusi Infrastruktur Database

  1. Bare-metal: Database diinstal dan berjalan langsung pada mesin physical server (perangkat keras asli).
  2. VM (Virtual Machine): Database berjalan pada sistem operasi virtual (bayangan) yang menumpang di dalam satu server fisik.
  3. Container: Lingkungan eksekusi terisolasi dan sangat portabel (contoh: Docker). Database dibungkus bersama konfigurasinya sehingga sangat ringan, mudah dipindahkan, dan dijalankan di mana saja.

Dampak NoSQL pada DBA

NoSQL (Not Only SQL) adalah sistem database non-relasional yang dirancang khusus untuk menyimpan Big Data (data masif yang tidak terstruktur).

NoSQL memberikan keuntungan low-cost storage (penyimpanan berbiaya rendah) untuk data berjumlah raksasa. Dampaknya: Profesi DBA kini wajib menguasai pengelolaan dan keamanan infrastruktur data modern berbasis NoSQL, bukan hanya berfokus pada relasional SQL biasa.

DBeaver VS XAMPP

XAMPP adalah software bundling lokal untuk menjalankan database pada komputer sendiri (Host).

DBeaver adalah aplikasi client antarmuka tingkat profesional untuk mengeksekusi query dan mengelola database dari jarak jauh (remote).

TANYA JAWAB (Q&A) WEEK 1

Q: Apakah DBA membutuhkan lingkungan (environment) yang berbeda?

A: Ya. Lingkungan untuk pengujian kode (Test) dan lingkungan untuk produk nyata/asli yang dipakai pengguna (Production) mutlak harus dipisah secara ketat. Tujuannya adalah untuk menjamin integritas data dan mencegah gangguan performa operasional database utama saat tim sedang menguji fitur sistem baru.

Q: Apa hubungan antara profesi DBA, Data Analyst, dan Data Engineer?
  1. DBA: Bertugas menjamin infrastruktur database selalu stabil, aman, dan tersedia 24/7 tanpa hambatan.
  2. Data Engineer: Bertugas memproses data mentah menjadi data terstruktur/matang dan memindahkannya ke Data Warehouse (gudang data).
  3. Data Analyst: Bertugas menganalisis data matang dari Data Warehouse tersebut untuk menyajikan Data Visualization (visualisasi analitik bisnis).

Database Architecture and Configuration - WEEK 2

Anatomi MySQL

Anatomi MySQL mirip tubuh manusia, terdiri dari komponen Optimizer (otak penentu rute query paling cepat) dan Storage Engine (otot pengelola penyimpanan fisik).

Storage Engine & ACID: Storage Engine standar bawaan adalah InnoDB. InnoDB secara absolut mendukung ACID operations (Atomicity, Consistency, Isolation, Durability) untuk menjamin transaksi aman dan data tidak terkorup akibat kegagalan sistem atau mati listrik.

Fitur MySQL

  • Multiple platforms (mendukung banyak sistem operasi).
  • Multithreading application (mampu memproses banyak perintah secara paralel/bersamaan efisien).
  • Memory Efficiency (manajemen yang hemat RAM).
  • High Scalability (mampu menampung lonjakan data berskala besar).

Parameter & Pemantauan MySQL (Query Monitoring)

MySQL Monitoring Commands
-- Menampilkan seluruh nilai konfigurasi parameter MySQL aktif
SHOW VARIABLES;

-- Menampilkan daftar riwayat perubahan data (binary logs)
SHOW BINARY LOGS;

-- Menampilkan struktur teks kode SQL asli procedure
SHOW CREATE PROCEDURE nama_prosedur;

-- Menampilkan teks kode SQL asli dari pembuatan fungsi kustom
SHOW CREATE FUNCTION nama_fungsi;

-- Menampilkan proses real-time untuk mendeteksi query lag
SHOW PROCESSLIST;

custom.cnf (Tuning Parameter)

Berkas teks berekstensi .cnf untuk tuning (menyetel performa) parameter mesin MySQL agar sesuai dengan kapasitas RAM server secara manual.

Tuning Example (custom.cnf)
# Meningkatkan batas pengguna serentak (dari 151 ke 250)
max_connections = 250

# Alokasi RAM khusus cache dan index InnoDB (Vital)
innodb_buffer_pool_size = 128M

# Mematikan pelacakan performa agar RAM server ringan
performance_schema = OFF

TANYA JAWAB (Q&A) WEEK 2

Q: Apa masalah yang terjadi pada XAMPP MySQL?

A: XAMPP sangat rentan mengalami port clash (bentrok jalur koneksi jaringan) dengan aplikasi web lain. XAMPP juga memiliki skalabilitas yang buruk dan tidak aman untuk konfigurasi remote management. Oleh sebab itu, XAMPP dilarang keras untuk digunakan pada sistem Production.

Q: Sebutkan query apa saja yang membutuhkan lebih banyak pemindaian baris dan indeks!

A: Kategori query yang melakukan pencarian atau filter spesifik di dalam klausa WHERE, query yang merelasikan banyak tabel di klausa JOIN, serta query pengurutan data massal menggunakan ORDER BY.

Security Hardening & User Management - WEEK 3

Tujuan Security Hardening

  1. Protect sensitive data: Melindungi data rahasia/sensitif dari akses ilegal.
  2. Meet regulatory requirements: Memenuhi aturan standar regulasi dan hukum data pemerintah.
  3. Avoid financial loss due to breaches: Mencegah kerugian finansial akibat insiden peretasan.

Ancaman Umum Database

Meliputi SQL Injection, Unauthorized Access, Data breach, Denial of Service (DoS), Code Modification, dan Malicious insider.

Lapisan Keamanan MySQL (4 Lapis)

  1. Authentication: Membuktikan "siapa pengguna tersebut". Verifikasi identitas menggunakan kombinasi username, source IP address, dan password.
  2. Authorization: Membuktikan "apa yang boleh dilakukan". Pengaturan batas izin akses (permissions) terhadap tabel atau database.
  3. Encryption: Penyandian wujud data fisik melalui ilmu kriptografi agar tidak bisa dibaca tanpa kunci dekripsi.
  4. Auditing: Pelacakan seluruh rekam jejak aktivitas melalui database log (mengetahui siapa mengubah data pada jam/hari tertentu).

Query DCL (Data Control Language) Lengkap

User & Access Management SQL
-- Buat akun untuk IP spesifik
CREATE USER 'staf_it'@'192.168.1.10' IDENTIFIED BY 'sandiKuat123';

-- Beri hak akses tertentu
GRANT SELECT, INSERT ON kampus_db.* TO 'staf_it'@'192.168.1.10';

-- Cabut hak akses tertentu
REVOKE INSERT ON kampus_db.* FROM 'staf_it'@'192.168.1.10';

-- Lihat daftar izin yang dimiliki user
SHOW GRANTS FOR 'staf_it'@'192.168.1.10';

-- Terapkan perubahan akses ke server permanen
FLUSH PRIVILEGES;

-- Hapus akun user permanen
DROP USER 'staf_it'@'192.168.1.10';

TANYA JAWAB (Q&A) WEEK 3

Q: Bagaimana mengatur akses 30 karyawan baru secara efisien tanpa manual satu per satu?

A: Cara mutlak yang benar dan profesional adalah menggunakan fitur ROLE (Grup Peran Hak Akses). DBA cukup membuat satu ROLE, berikan hak akses pada grup tersebut, lalu daftarkan ke-30 akun karyawan baru ke dalam grup peran tersebut agar otomatis mewarisi seluruh izin akses.

Role Implementation
CREATE ROLE 'tim_sales';
GRANT SELECT, INSERT ON perusahaan_db.* TO 'tim_sales';
GRANT 'tim_sales' TO 'karyawan_baru_1'@'localhost';

Indexing Your Data - WEEK 4

MySQL Index & B-Trees

Index adalah struktur data internal tambahan (seperti daftar isi buku). Tujuannya mutlak untuk menghindari Full Table Scan (proses mesin membaca seluruh baris berurutan yang sangat lambat).

Algoritma standarnya adalah B-Trees (Balanced Trees), yang menyortir rentang nilai dari paling kiri ke kanan secara seimbang.

Pengecualian Tipe Index (Exceptions)

  • 1. Spatial data types menggunakan struktur R-trees.
  • 2. MEMORY tables mendukung penggunaan Hash indexes.
  • 3. InnoDB menggunakan daftar terbalik (Inverted lists) khusus untuk FULLTEXT indexes.

Fungsi Index

  1. Maintaining data integrity: Menjaga data tetap unik via Primary/Unique Key.
  2. Optimizing data access: Mempercepat drastis durasi pencarian data pada klausa WHERE.
  3. Improving table joins and sorting: Mempercepat eksekusi JOIN dan ORDER BY.

Dampak DML & DISK

Perintah manipulasi data (DML) seperti INSERT, UPDATE, DELETE akan berjalan lebih lambat jika tabel memiliki Index.

Alasannya: mesin MySQL harus bekerja dua kali (memperbarui data fisik dan menyusun ulang formasi akar B-Trees). Index juga menambah beban ukuran penyimpanan pada disk (index_length membesar).

FULLTEXT Index

Sistem index spesifik berbasis inverted lists (tokenisasi kalimat). Dirancang khusus untuk memfasilitasi pencarian satu kata acak di posisi mana pun tanpa merusak jalur algoritma baca.

TANYA JAWAB (Q&A) WEEK 4

Q: Aplikasi kasir lag saat staf mencari nama 'MARY'. Bagaimana solusinya?

A: Sebelum ada index, perintah EXPLAIN menunjukkan type = ALL (Full Table Scan). Setelah kolom first_name dipasangi Index, indikator berubah menjadi type = ref, dan estimasi rows menyusut drastis ke angka satuan.

CREATE INDEX idx_first_name ON customer(first_name);
Q: Mengapa Execution Cost query mencapai 8.4? Bisakah diturunkan?

A: Execution Cost mencapai 8.4 karena mesin memfilter dua kolom (customer_id dan amount) tanpa indeks. Beban bisa diturunkan dengan menciptakan Composite Index (Indeks Gabungan).

CREATE INDEX idx_audit_finance ON payment(customer_id, amount);
Q: Apa perbedaan full text index dengan indeks biasa?

A: Index biasa (B-Trees) dirancang untuk deteksi karakter awalan murni (kiri ke kanan). LIKE '%kata%' akan melumpuhkan B-Trees. Full-Text Index membedah kalimat menjadi token mandiri, sehingga bisa melacak teks di tengah kalimat (MATCH... AGAINST).

Optimize the large Query - WEEK 5

Mengidentifikasi Bottleneck

Hambatan utama kecepatan sistem (Bottleneck) hampir 100% selalu disebabkan oleh fenomena Full Table Scan. Mendeteksi riwayat masalah ini dilakukan menggunakan perintah SHOW GLOBAL STATUS;.

SARGABLE Query (Search ARGument ABLE)

Struktur penulisan sintaks query yang benar agar Optimizer mesin menggunakan rute navigasi Index secara penuh dan terhindar dari Full Table Scan.

Golden Rule SARGABLE: Do not combine it with function. Dilarang keras membungkus nama kolom target di klausa WHERE dengan fungsi SQL (seperti YEAR, MONTH, LEFT) karena pasti mematikan Index.

Praktik Terbaik (Best Practices)

  • Hindari SELECT *: Menyebabkan Memory wasting (pemborosan RAM/bandwidth) dan memperbesar risiko Full Table Scan. Selalu tulis spesifik nama kolom.
  • Temporary Tables: MySQL membangun tabel dadakan saat agregasi (GROUP BY, RANGE, atau ORDER BY).
  • Aturan Tuning: Parameter tmp_table_size dan max_heap_table_size mutlak harus di-set sama agar kalkulasi ditampung di RAM (MEMORY), bukan Hardisk.

Partitioning Table

Teknik rekayasa membelah fisik dari tabel masif menjadi partisi-partisi bongkahan kecil berdasarkan kolom pengikat (Partition Key), contohnya rentang bulan.

Aturan Mutlak: Saat menjalankan SELECT, UPDATE, atau DELETE, kolom Partition Key mutlak wajib masuk ke klausa WHERE agar mesin tidak memindai seluruh blok wilayah partisi.

TANYA JAWAB (Q&A) WEEK 5

Q: Perintah apa untuk memantau performa query?

A: Perintah fundamental yang wajib mutlak digunakan adalah EXPLAIN di awal penulisan query untuk membongkar Execution Plan.

Q: Apakah query ini bagus: SELECT * FROM employees WHERE YEAR(hire_date) = 1990;?

A: Sangat buruk (Bukan SARGABLE). Fungsi YEAR() merusak fungsi B-Trees. Ganti menggunakan operator rentang baku (>= dan <=).

SELECT * FROM employees WHERE hire_date >= '1990-01-01' AND hire_date <= '1990-12-31';

Advanced SQL Tuning & Performance - WEEK 6

Explain Analyze

Instrumen analisis pembedahan tingkat mahir. Tidak sekadar memprediksi, alat ini benar-benar mengeksekusi beban query di memori fisik untuk mencetak laporan Actual Time, Actual Rows, dan Loops.

Composite Index

Rancangan Index yang mengikat dua kolom atau lebih sekaligus secara berurutan. Mutlak untuk meroketkan performa jika skenario query sering mem-filter banyak kolom sekaligus di WHERE.

10 Tips Best Practices Optimization

  1. Optimizing queries for the query cache.
  2. EXPLAIN your SELECT queries.
  3. LIMIT 1 when getting a unique row.
  4. Indexing for search fields.
  5. Avoiding SELECT * and COUNT*.
  6. Always have an ID field.
  7. Using ENUM over VARCHAR.
  8. Using prepared statements.
  9. Splitting big DELETE/INSERT queries.
  10. Avoiding the delete trigger.

BLOB (Binary Large Object)

TIPE TINYBLOB/BLOB sangat stabil untuk jutaan baris. Namun wadah raksasa MEDIUMBLOB/LONGBLOB tidak disarankan karena menyebabkan degraded performance pada operasi intensif.

TANYA JAWAB (Q&A) WEEK 6

Q: Mengapa MySQL bisa lambat dengan tabel yang besar?

A: Karena kelalaian hilangnya constraint/index dan malapraktik range scans yang menyedot RAM dan memicu limitasi kelumpuhan degradasi performa.

BAGIAN 2: KUMPULAN SOAL & JAWABAN (STUDI KASUS)

• Soal 1 (Identifikasi Storage Engine):

Bagaimana cara mengetahui tipe mesin penyimpanan yang saat ini tertanam pada tabel mahasiswa?

SHOW CREATE TABLE mahasiswa;
• Soal 3 (Proteksi Kedaruratan Keamanan User):

Tuliskan perintah untuk secepatnya membekukan/mengunci mati login akun staf_gudang.

ALTER USER 'staf_gudang'@'localhost' ACCOUNT LOCK;
• Soal 4 (Solusi Optimasi Pencarian Ganda):

Aplikasi lambat mengeksekusi filter kategori dan stok sekaligus. Optimasi apa yang paling efisien?

CREATE INDEX idx_kategori_stok_kritis ON produk (kategori, stok);
• Soal 6 (Membedah Subquery Cacat ke Konstruksi JOIN):

Ubah formasi subquery bertumpuk SELECT nama, (SELECT...) ke dalam formasi JOIN!

SELECT k.nama, d.nama_divisi AS departemen
FROM karyawan k
INNER JOIN divisi d ON k.divisi_id = d.id;

BAGIAN 3: KAMUS SINTAKS SQL LENGKAP & CONTOH

A. DDL (Data Definition Language)

1. Membuat & Menghidupkan Database

CREATE DATABASE IF NOT EXISTS toko_db;
USE toko_db;

2. Operasi Menghapus Struktur

-- Hapus struktur tabel secara permanen
DROP TABLE pelanggan;

-- Hapus pangkalan database utama
DROP DATABASE toko_db;

B. DML (Data Manipulation Language)

1. Bulk Insert (Manual & Tabel Lain)

-- Bulk Insert Manual
INSERT INTO pelanggan (nama, email) VALUES
('Siti', 'siti@mail.com'), ('Joko', 'joko@mail.com');

-- Bulk Insert dari Tabel Lain
INSERT INTO tabel_tujuan (kolom1, kolom2)
SELECT kolom_sumber1, kolom_sumber2 FROM tabel_sumber
WHERE kondisi;

2. Update & Delete

-- WAJIB MENGGUNAKAN WHERE
UPDATE pelanggan SET email = 'baru@mail.com' WHERE id = 1;
DELETE FROM pelanggan WHERE id = 5;

C. OPERASI RELASIONAL (JOIN)

-- Mengambil seluruh baris data dari tabel KIRI
SELECT p.nama, t.tgl FROM pelanggan p LEFT JOIN transaksi t ON p.id = t.id;

-- Mengambil seluruh baris data dari tabel KANAN
SELECT a.nama, b.judul FROM peminjaman p RIGHT JOIN buku b ON p.id = b.id;

E. PERINTAH DBA (Tuning & Partisi)

1. Profiling & Diagnosa

EXPLAIN SELECT * FROM transaksi WHERE id = 5;
EXPLAIN ANALYZE SELECT * FROM transaksi;

2. Partisi Tabel Raksasa

ALTER TABLE payment DROP PRIMARY KEY, ADD PRIMARY KEY (payment_id, payment_date);

ALTER TABLE payment PARTITION BY RANGE (MONTH(payment_date)) (
  PARTITION p_awal VALUES LESS THAN (6),
  PARTITION p_sisa VALUES LESS THAN MAXVALUE
);