Flush-host di MySQL


Mungkin banyak dari anda yang telah bertemu dengan masalah maksimal koneksi MySQL dan anda perlu melakukan flush-host. Tutorial ini akan menjelaskan bagaimana untuk melakukannya.

Pertama Anda harus memiliki user admin dari server MySQL anda. Dalam kebanyakan kasus itu adalah root. Login melalui SSH dan jalankan perintah berikut:

$ mysqladmin -u root -p flush-host

Mengapa itu terjadi? Sebagian besar itu terjadi karena 2 alasan:

  • Script anda tidak menutup koneksi ke MySQL setelah mereka selesai.
  • MySQL memungkinkan 250 koneksi secara default. Jika hal ini tidak cukup untuk kebutuhan anda, anda dapat mengedit /etc/my.cnf dan meningkatkan nilai maksimal koneksi.
  • Tuning Perfoma MySQL


    Setelah beberapa project menggunakan DB Engine MySQL akhirnya mendapatkan masalah pertama  yaitu Eksekusi Select Query yang sangat lamban pada saat data sudah mencapai ribuan baris record, terlebih untuk query  yang kompleks. Akhirnya diputuskan lah untuk menlakukan tunning pada MySQL, setelah browsing sana-sini akhirnya didapatkan kesimpulan tunning atau increasing perfomance MySQL sendiri secara umum terdiri dari 3 bagian, yaitu :

    1. Optimasi MySQL variable di file my.ini (my.cnf).
    2. Optimasi Struktur Table.
    3. Optimasi SQL Query.

    Artikel bagian pertama ini yang akan dibahas cuma Optimasi MySQL variable. Yaitu kita akan men-edit variable-variable bawaan dari instalasi awal MySQL. Karena secara default settingan variable MySQL adalah memungkinkan untuk berjalan dikomputer minim resource (spesifikasi hardware rendah), untuk kebutuhan production/live terlebih lagi apabila spesifikasi hardware Database Server kita tinggi, maka hal ini tentunya kurang relevan lagi.

    Proses edit variable MySQL bisa dengan berbagai cara, tapi yang akan kita pakai adalah langsung mengedit file my.ini (my.cfg). Matikan dulu service MySQL apabila sendang berjalan, masuk ke commandline (cmd) Windows, ketik :

        mysqladmin -u[username] -p[password] shutdown

    Untuk mengeksekusi perintah diatas, pastikan mysql console telah terdaftar di Environment Variable Windows, dan user yang digunakan memiliki hak Akses penuh (sysdba). Kemudian silakan ke folder instalasi MySQL, kemudian cari file my.ini (my.cfg)
    Contoh lokasinya

    • Pada windows di : “C:\Program Files\MySQL\MySQL Server 5.5\my.ini”
    • Pada linux di : “/etc/my.cnf”
    • Buka dengan Notepad atau Text Editor lainnya, cari & edit variable-variable berikut menjadi :
    • key_buffer_size

      Untuk kebutuhan table yang menggunakan engine MyISAM. Max 25% dari total memory (RAM) Hardware dalam satuan MB, misal memory saya 3GB (3002 MB * 25%= 750,5 MB) maka saya edit menjadi 750M. apabila tidak ada table MyISAM sebaiknya disetting menjadi 16-32M.

    • innodb_buffer_pool_size

      Untuk kebutuhan table yang menggunakan engine InnoDB. Max 70% dari total memory (RAM) Hardware dalam satuan MB, misal memory saya 3GB (3002 MB * 25%= 2101,4 MB) maka saya edit menjadi 2101M.

    • innodb_additional_mem_pool_size

      Edit menjadi 20M.

    • innodb_log_buffer_size

      Edit menjadi 8M.

    • table_cache

      Edit menjadi 1024.

    • thread_cache_size

      Edit menjadi 16.

    • sort_buffer_size

      Edit menjadi 512K

    • read_buffer_size

      Nilai variable sort_buffer_size diatas dibagi 2, maka dengan contoh diatas adalah 256K

    • innodb_flush_log_at_trx_commit

      Yang ini hanya opsional, apabila edit menjadi 0 (nol) bisa menjadi sedikit lebih cepat, namun kekurangannya adalah memungkinkan untuk kehilangan data yang sedang ditransaksikan apabila server crash.

      Setelah itu silakan jalankan kembali service MySQL, kembali ke commandline (cmd) ketik :

          net start mysql (pada windows)
          /etc/init.d/mysql start (pada linux)

      Apabila service gagal dijalankan dan terdapat error, maka periksa kembali hasil edit variable diatas, mungkin saja ada nilai yang kelebihan dan hal ini tentu saja tergantung spesifikasi hardware masing-masing 

      Dari Tunning bagian pertama ini saja, yang saya dapatkan adalah perfomance dalam menginsert 1000 record (20 kolom) sekaligus ke table InnoDB menjadi 2-3x lebih cepat, dibanding settingan variable awal bawaan instalasi MySQL 

      Akhir kata, janganlah sekaligus menaikan nilai variable sampai maksimal, naikanlah secara bertahap, lihat hasil perkembangan & kebutuhan. Sekian artikel kali ini, natikan lanjutan artikel berikutnya. semoga bisa bermanfaat 

    ORA-03297


    Mencoba untuk mengecilkan file tablespace yang memiliki banyak ruang kosong bisa gagal dengan kesalahan ini:

    SQL> alter database datafile '/ora1data/TEST/TEST_ts_data1_f1.dbf' resize 2g ;
    ORA-03297: file contains used data beyond requested RESIZE value

    Dimulai dengan mendapatkan keluaran SQL untuk memperbaiki ini, untuk sementara memindahkan object segmen ke tablespace lain menggunakan script seperti ini. (Perhatikan bahwa script ini mencakup perintah untuk memindahkan LOB).

    set pages 9999 lines 132
    spool go.tmp
    select 'alter table '||owner||'.'||table_name||' move tablespace ts_data2 ;'
    from dba_tables
    where tablespace_name = 'TS_DATA1'
    order by 1
    /
    select 'alter index '||owner||'.'||index_name||' rebuild tablespace ts_data2 ;'
    from dba_indexes
    where tablespace_name = 'TS_DATA1'
    and index_type != 'LOB'
    order by 1
    /
    select 'alter table '||owner||'.'||table_name||' move tablespace ts_data2 lob ('||column_name||') store as (tablespace ts_data2) ;'
    from dba_lobs
    where tablespace_name = 'TS_DATA1'
    order by 1
    /
    spool off
    @go.tmp

    Object bisa dipindah kembali setelah itu, setelah tablespace asli telah menyusut, seperti diinginkan.

    Satu hal yang perlu diperhatikan adalah kuota tablespace pengguna selama proses move. Jika Anda mendapatkan error seperti ini:

    ORA-01950: no privileges on tablespace 'TS_DATA2'

    Anda juga perlu memberikan hak istimewa tablespace sementara terbatas kepada pengguna yang terkena dampak,
    atau memberikan mereka kuota pada tablespace yang baru.

    Bulan Hijriah


    Saat ini banyak dari kita yang bahkan tidak hapal dengan urutan bulan islam/bulan Hijariyah, begitupun dengan makna dari masing-masing bulan tersebut. Uraian ini semoga bermanfaat bagi kita semua, sekedar mengulang kembali.

    Penentuan dimulainya sebuah hari/tanggal pada Kalender Hijriyah berbeda dengan pada Kalender Masehi. Pada sistem Kalender Masehi, sebuah hari/tanggal dimulai pada pukul 00.00 waktu setempat. Namun pada sistem Kalender Hijriah, sebuah hari/tanggal dimulai ketika terbenamnya matahari di tempat tersebut.

    1. MUHARRAM, artinya: yang diharamkan atau yang menjadi pantangan. Penamaan Muharram, sebab pada bulan itu dilarang menumpahkan darah atau berperang. Larangan tesebut berlaku sampai masa awal Islam.
    2. SHAFAR, artinya: kosong. Penamaan Shafar, karena pada bulan itu semua orang laki-laki Arab dahulu pergi meninggalkan rumah untuk merantau, berniaga dan berperang, sehingga pemukiman mereka kosong dari orang laki-laki.
    3. RABI’ULAWAL, artinya: berasal dari kata rabi’ (menetap) dan awal (pertama). Maksudnya masa kembalinya kaum laki-laki yang telah meninqgalkan rumah atau merantau. Jadi awal menetapnya kaum laki-laki di rumah. Pada bulan ini banyak peristiwa bersejarah bagi umat Islam, antara lain: Nabi Muhammad saw lahir, diangkat menjadi Rasul, melakukan hijrah, dan wafat pada bulan ini juga.
    4. RABIU’ULAKHIR, artinya: masa menetapnya kaum laki-laki untuk terakhir atau penghabisan.
    5. JUMADILAWAL, nama bulan kelima. Berasal dari kata jumadi (kering) dan awal (pertama). Penamaan Jumadil Awal, karena bulan ini merupakan awal musim kemarau, di mana mulai terjadi kekeringan.
    6. JUMADILAKHIR, artinya: musim kemarau yang penghabisan.
    7. RAJAB, artinya: mulia. Penamaan Rajab, karena bangsa Arab tempo dulu sangat memuliakan bulan ini, antara lain dengan melarang berperang.
    8. SYA’BAN, artinya: berkelompok. Penamaan Sya’ban karena orang-orang Arab pada bulan ini lazimnya berkelompok mencari nafkah. Peristiwa penting bagi umat Islam yang terjadi pada bulan ini adalah perpindahan kiblat dari Baitul Muqaddas ke Ka’bah (Baitullah).
    9. RAMADHAN, artinya: sangat panas. Bulan Ramadhan merupakan satu-satunya bulan yang tersebut dalam Al-Quran, Satu bulan yang memiliki keutamaan, kesucian, dan aneka keistimewaan. Hal itu dikarenakan peristiwa-peristiwa peting seperti: Allah menurunkan ayat-ayat Al-Quran pertama kali, ada malam Lailatul Qadar, yakni malam yang sangat tinggi nilainya, karena para malaikat turun untuk memberkati orang-orang beriman yang sedang beribadah, bulan ini ditetapkan sebagai waktu ibadah puasa wajib, pada bulan ini kaurn muslimin dapat rnenaklukan kaum musyrik dalarn perang Badar Kubra dan pada bulan ini juga Nabi Muhammad saw berhasil mengambil alih kota Mekah dan mengakhiri penyembahan berhala yang dilakukan oleh kaum musyrik.
    10. SYAWWAL, artinya: kebahagiaan. Maksudnya kembalinya manusia ke dalam fitrah (kesucian) karena usai menunaikan ibadah puasa dan membayar zakat serta saling bermaaf-maafan. Itulah yang mernbahagiakan.
    11. DZULQAIDAH, berasal dari kata dzul (pemilik) dan qa’dah (duduk). Penamaan Dzulqaidah, karena bulan itu merupakan waktu istirahat bagi kaum laki-laki Arab dahulu. Mereka menikmatmnya dengan duduk-duduk di rumah.
    12. DZULHIJJAH artinya: yang menunaikan haji. Penamaan Dzulhijjah, sebab pada bulan ini umat Islam sejak Nabi Adam as. menunaikan ibadah haji.

     

    Sumber : Forum Sebelah

    Different SYS and SYSTEM User on Oracle


    SYS
    • automatically created when Oracle database is installed
    • automatically granted the DBA role
    • has a default password: CHANGE_ON_INSTALL (make sure you change it)
    • owns the base tables and views for the database data dictionary
    • the default schema when you connect as SYSDBA
    Tables in the SYS schema are manipulated only by the database. They should never be modified by any user or database administrator, and no one should create any tables in the schema of user SYS. Database users should not connect to the Oracle database using the SYS account.
    SYSTEM
    • automatically created when Oracle database is installed
    • automatically granted the DBA role
    • has a default password: MANAGER (make sure you change it)
    • used to create additional tables and views that display administrative information
    • used to create internal tables and views used by various Oracle database options and tools
    Never use the SYSTEM schema to store tables of interest to non-administrative users.

    DBMS_RANDOM.STRING


    Mulai dari Oracle 8.0 mulai diperkenalkan dbms_random yang dapat digunakan untuk memilih/menggenerate data acak, disini akan dibahas dbms_random.string().

    dbms_random.string(opt IN CHAR, len IN NUMBER)
    RETURN VARCHAR2;

    opt seed values:
    ‘a’,’A’   : alpha characters only (mixed case)
    ‘l’,’L’    : lower case alpha characters only
    ‘p’,’P’   : any printable characters
    ‘u’,’U’   : upper case alpha characters only
    ‘x’,’X’   : any alpha-numeric characters (upper)

    Semoga bermanfaat 😀

    Bitmap Join Index


    Dalam peningkatan kinerja Oracle10g dibuat Materialized View untuk menyimpan baris yang dihasilkan dari query. Manfaat dari mekanisme ini masih relevan, tapi subset tertentu dari query yang digunakan dalam data warehouse dapat mengambil manfaat dari penggunaan Bitmap Join Index.

    Cara Kerja
    Dalam Bitmap Index, setiap nilai yang berbeda untuk kolom tertentu dikaitkan dengan suatu bitmap dimana setiap bit mewakili baris pada tabel. Sebuah ‘1 ‘berarti bahwa baris yang berisi nilai, ‘0’ berarti tidak.
    Bitmap Join Index memperluas konsep seperti ini bahwa indeks berisi data untuk mendukung join query, memperbolehkan query untuk mengambil data dari index daripada referensi join tabel. Setelah informasi dikompresi ke dalam bitmap, ukuran struktur yang dihasilkan secara signifikan lebih kecil dari Materialized View.

    Pembuatan

    Index ini dibuat dengan mengacu pada kolom dalam join table dengan yang akan digunakan untuk mendukung query. Pada contoh berikut ini index dibuat di tabel SALES join ke tabel CUSTOMERS: 
    CREATE BITMAP INDEX CUST_SALES_BJI
    ON SALES(CUSTOMERS.STATE)
    FROM  SALES, CUSTOMERS
    WHERE SALES.CUST_ID = CUSTOMERS.CUST_ID;

    Karena kolom CUSTOMERS.STATE dirujuk dalam klausa ON dari index, query pada tabel SALES yang join ke tabel CUSTOMERS untuk mengambil kolom STATE dapat melakukannya tanpa referensi tabel CUSTOMERS. Sebaliknya data dibaca dari bitmap join indeks:
    SELECT SUM(SALES.DOLLAR_AMOUNT)
    FROM   SALES,CUSTOMER
    WHERE  SALES.CUST_ID  = CUSTOMER.CUST_ID
    AND    CUSTOMER.STATE = 'CALIFORNIA';

    Ketika berhadapan dengan dataset besar, dapat mengurangi pemrosesan sangat besar. 

    Pembatasan
    Bitmap Gabung Indeks memiliki batasan sebagai berikut:

    • DML Paralel saat ini hanya didukung pada tabel fakta. DML paralel pada salah satu tabel dimensi yang berpartisipasi akan ditandai indeks sebagai unusable.
    • Hanya satu tabel dapat diperbarui bersamaan dengan transaksi yang berbeda bila menggunakan indeks bitmap join.
    • Tidak ada tabel yang muncul dua kali dalam join.
    • Tidak dapat membuat bitmap index join pada tabel IOT atau tabel TEMPORARY.
    • Kolom dalam indeks semua harus kolom dari tabel dimensi.
    • Join kolom tabel dimensi harus berupa kolom primary key atau memiliki sifat unique.
    • Jika tabel dimensi memiliki kunci primer komposit, setiap kolom pada kunci primer harus menjadi bagian dari join.

    Semoga ini bisa membantu.

    Menghapus File Yang Berusia Seminggu Pada Linux dan Windows


    Kadang-kadang ketika kita menjalankan sebuah database Oracle, menjadi perlu untuk mengotomatisasi beberapa tugas seperti membersihkan user log yang bisa membengkak ukuranya seiring waktu. Berikut ini beberapa penjelasan tentang contoh otomatisasi penghapusan file dengan memanfaatkan crontab linux dan schedular pada windows

    1. LINUX

    Dalam linux seperti Centos OS cukup sederhana untuk menghapus file yang lebih tua dari ‘x’ hari, hanya dengan menjalankan:

    find /u2/test -name “*.log” -mtime +7 -exec rm {} \;

    Dalam UNIX seperti Solaris OS’es rasa itu cukup sederhana untuk menghapus file lebih tua dari ‘x’ hari hanya dengan menjalankan:

    00 2 * * 5 find /u2/stest -name “*.log” -ctime +7 -exec rm {} \; >/dev/null 2>&1

    Ini akan menghapus. log file yang lebih tua dari 7 hari pada setiap Jumat di 02:00

    2. WINDOWS

    Untuk Windows ini agak sedikit rumit. Meskipun windows memiliki fungsi scripting kuat melalui script batch. Ia tidak menyediakan utilitas yang baik untuk menemukan file yang lebih tua dari x hari. Ada forfiles utilitas tetapi itu tidak datang secara default di semua versi windows.

    Menggunakan forfiles untuk menghapus file yang lebih tua dari 7 hari.

    FORFILES /p C:\myfolder /s /m *.dbf /d -7 /c “CMD /C del /Q /F @FILE

    VBSCRIPT METHOD

    Hal terbaik untuk dilakukan adalah melakukannya melalui script VB kecil dan memanggil vbscript melalui file batch. Kedengarannya rumit, tapi sangat mudah. Berikut adalah langkah-demi-langkah untuk menghapus file lebih tua dari “x” hari melalui sebuah vbscript.

    1. Buat vbscript. Cukup salin kode di bawah ini dan menyediakan parameter hari yang dinginkan dan lokasi folder log arsip

    # please note this will delete all files in that folder,older than 7days.

    iDaysOld = 7
    strPath = “F:\OraArchives”

    Set objFSO = CreateObject(“Scripting.FileSystemObject”)
    Set objFolder = objFSO.GetFolder(strPath)
    Set colSubfolders = objFolder.Subfolders
    Set colFiles = objFolder.Files

    For Each objFile in colFiles
    If objFile.DateLastModified < (Date() – iDaysOld) Then
    ‘MsgBox “Dir: ” & objFolder.Name & vbCrLf & “File: ” & objFile.Name
    objFile.Delete
    End If
    Next

    For Each objSubfolder in colSubfolders
    Set colFiles = objSubfolder.Files
    For Each objFile in colFiles
    If objFile.DateLastModified < (Date() – iDaysOld) Then
    ‘MsgBox “Dir: ” & objSubfolder.Name & vbCrLf & “File: ” & objFile.Name
    objFile.Delete
    End If
    Next
    Next

    2. Simpan skrip ini sebagai DelArchive.vbs

    3.  Buat file batch dengan mengklik kanan pada desktop dan membuat file teks baru dan mengganti nama file dengan ekstensi ‘ .bat’ dan paste kode di bawah ini.

    call “C:\Documents and Settings\Desktop\DelArchive.vbs”

    Sekarang jalankan file batch dan akan melaksanakan vbscript dan itu akan membersihkan file yang lebih tua dari 7 hari. Anda dapat menempatkan file batch in scheduler tugas dan menjalankannya setiap hari minggu sesuai dengan kenyamanan Anda.