Daftar Isi
Tips
- Gunakan https
- Lebih aman
- Lebih stabil, terutama berhubungan dengan proxy
- Disarankan pengguna menggunakan Mozilla Firefox
- Buat nilai default untuk kuis, penugasan, forum dan sebagainya (lihat di sini)
- Tips untuk Quiz:
- Buat 1 halaman 4 soal apabila soal berupa MCQ (multiple choice question). Hal ini terbukti membuat proses quiz menjadi lebih ringan.
- Set waktu mulai ujian kurang dari waktu seharusnya untuk ujian yang terdapat banyak peserta, misalnya seharusnya mulai ujian jam 08:00, maka waktu mulai ujian dapat diatur jam 07:45. Hal tersebut bertujuan untuk memecah load server. Proses membuka dan menutup quiz relatif lebih berat, sedangkan apabila sudah terbuka soalnya maka akan relatif lebih ringan.
- Pantau kemampuan dan pengaturan server dari sisi database server dan web server. Gunakan teknologi server yang terbaik tetapi stabil, misalnya gunakan:
- Nginx,
- Apache dengan MPM Event
- dan sebagainya
- Apabila Moodle berjalan lambat, bisa jadi bukan aplikasi web yang bermasalah, seperti Apache, Nginx, PHP dan sebagainya, tetapi bisa jadi yang bermasalah adalah basis datanya. Caranya adalah memonitor database untuk mencari slow query.
Tips Cron
- Bolehkan menjalankan cron hanya dari terminal/CLI
- Buat penjadwalan eksekusi cron dengan user non root selama waktu tertentu pada jam tidak sibuk, meskipun cron dibuat di root
0 21 * * * timeout 14400 runuser -l userphpnonroot -c "/usr/bin/phpx.x /path/admin/cli/cron.php"
0 22 * * * timeout 14400 runuser -l userphpnonroot -c "/usr/bin/phpx.x /path/admin/cli/cron.php"
0 23 * * * timeout 14400 runuser -l userphpnonroot -c "/usr/bin/phpx.x /path/admin/cli/cron.php"
Slow Query Moodle
Slow query pada saat masuk ke Quiz
Buka MySQL Workbench > Client Connections
Urutkan berdasarkan Time (descending). Klik kanan pada query yang lama (>5 detik, bahkan >3 detik jika mau), kemudian pilih Show in Editor
tambahkan explain
di awal query, misalnya jika muncul select a.b from a
, maka menjadi explain select a.b from a
ditemukan slow query padaSELECT name,value FROM prefix_cache_flags WHERE flagtype = 'accesslib/dirtycontexts' AND expiry >= '1638410974' AND timemodified > '1638407075';
solusi pada permasalahan tersebut adalah menambah indeks pada expiry dan timemodified dengan perintah sebagai berikutALTER TABLE db.prefix_cache_flags
ADD INDEX idx_time (timemodified ASC, expiry ASC);
Untuk slow query lain dapat diselesaikan dengan cara yang hampir sama. Intinya adalah memaksimalkan penggunaan memori melalui index.
Slow query pada saat mengerjakan Quiz
ditemukan slow query pada SELECT quba.id AS qubaid, quba.contextid, quba.component, quba.preferredbehaviour, qa.id AS questionattemptid, qa.questionusageid, qa.slot, qa.behaviour, qa.questionid, qa.variant, qa.maxmark, qa.minfraction, qa.maxfraction, qa.flagged, qa.questionsummary, qa.rightanswer, qa.responsesummary, qa.timemodified, qas.id AS attemptstepid, qas.sequencenumber, qas.state, qas.fraction, qas.timecreated, qas.userid, qasd.name, qasd.value FROM db.prefix_question_usages quba LEFT JOIN db.prefix_question_attempts qa ON qa.questionusageid = quba.id LEFT JOIN db.prefix_question_attempt_steps qas ON qas.questionattemptid = qa.id LEFT JOIN db.prefix_question_attempt_step_data qasd ON qasd.attemptstepid = qas.id WHERE quba.id = '10904' ORDER BY qa.slot, qas.sequencenumber
solusi pada permasalahan tersebut adalah menambah indeks pada mdl_question_attempts.slot dan mdl_question_attempt_steps.sequencenumber dengan perintah sebagai berikutALTER TABLE db.prefix_question_attempts
ADD INDEX idx_quesatte_slot (slot ASC);
ALTER TABLE db.prefix_question_attempt_steps
ADD INDEX idx_quesattestep_sec (sequencenumber ASC);
karena pada join sudah diindeks semua, sedangkan pada sort belum diindeks
Commit
Secara bawaan, moodle menggunakan engine innodb dengan setting innodb_flush_log_at_trx_commit=1, tetapi hal ini akan menjadi hambatan ketika ada transaksi yang banyak dalam waktu bersamaan. Oleh karena itu, dapat menggunakan pengaturan innodb_flush_log_at_trx_commit=2.
The default value of 1 is required for full ACID compliance. You can achieve better performance by setting the value different from 1, but then you can lose up to one second worth of transactions in a crash. With a value of 0, any mysqld process crash can erase the last second of transactions. With a value of 2, only an operating system crash or a power outage can erase the last second of transactions. InnoDB’s crash recovery works regardless of the value.
Setelah di-tune up
Kondisi: Server yang berada di Yogyakarta diakses secara simultan untuk ujian dari Surakarta dan Malang sebanyak 180 peserta.
- PHP-FPM hanya menjalankan 29 thread (1/6 dari total peserta)
- Apache menjalankan 193 thread (total peserta + 13)
- MySQL
- Tidak ada slow query
- Thread connected tidak lebih dari 10 ketika ujian sudah berjalan
Demikian, semoga bermanfaat. [bst]
3 replies on “Setting Moodle Untuk Administrator atau Programmer”
[…] Lakukan sesuai instruksi di https://pdsi.unisayogya.ac.id/setting-moodle-untuk-administrator-atau-programmer/#jumlah-student […]
[…] Contoh monitoring koneksi untuk menemukan slow query dan solusinyahttps://pdsi.unisayogya.ac.id/setting-moodle-untuk-administrator-atau-programmer/4#slow-query-moodle […]
[…] Setting Moodle Untuk Administrator atau Programmer […]