Archive

Archive for March, 2009

Menganalisa log mysqld.log

March 17th, 2009

Sekalian udah lama gak ngeblog.. sekarang ngisi lagi, meskipun gak penting… hahahaha…

Oke, terkait dengan aktifitas analisa log web di openx (ini seharusnya posting tersendiri lagi) untuk mengetahui response times dan request per seconds. Dari hasil log diketahui bahwa request yang paling lama responsenya (lebih dari 1 detik) adalah script-script yang menjalankan aktifitas database. Meskipun di lihat dari dokumentasi openx, sebenarnya request ke database di cache menjadi file, yang kemudian request-request selanjutnya yang sama akan mengambil di file. Tapi bagaimanapun juga, penulis masih penasaran, apa bener dia ngecache ke file, gak melakukan request yang sama berulang-ulang ke database.

Untuk itu penulis coba buat script pake python untuk analisa mysqld.log. Ini log yang mencatat aktifitas DML dan juga DDL. Penulis hanya tertarik pada request query SELECT saja, karena request inilah yang bisa dicache pake memcached nantinya. Tapi untuk mengetahui pasti, apa bener ada request SELECT yang sama berulang-ulang, yaaa…. pake script python ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import hashlib, sys
def readlines(fl,sep='\n'):
    line=''
    initial=0
    data=fl.read(1024)
    while data!='':
        possep=data.find(sep,initial)
        if possep==-1:
            line=line+data[initial:]
            possep=initial=0
            data=fl.read(1024)
        else:
            line=line+data[initial:possep]
            yield line
            line=''
            initial=possep+len(sep)
    if line!='':
        yield line

for line in readlines(open(sys.argv[1]),sep='\t\t'):
    pos = line.find('SELECT',0)
    if pos != -1:
        print hashlib.md5(line[pos:]).hexdigest()

Intinya parse per line query SELECT-nya, kemudian di md5sum. Dengan begitu keliatan jika md5sumnya sama, berarti querynya sama persis. Coba di test di satu hari saja.
Panggil parsemysql.py|wc -l, hasilnya 973954 baris. Setelah itu panggil parsemysql.py|uniq|wc -l, hasilnya 969174 baris.
Wadow… kok selisihnya gak jauh ya…. padahal berharap selisih banyak, biar bisa dioptimasi pake memcached. Ya udah…. pupus deh :( …. Berarti emang bener, request udah dicache di file oleh openx.

—- Updated —–
Blo’on…. keliru ternyata cara cari digest yang sama. Seharusnya di sort dulu, baru di uniq…. Semprul…
Percobaan kedua di lakukan; sama dengan sebelumnya, yang pertama panggil parsemysql.py|wc -l, hasilnya 1013913 baris. Setelah itu baru menghilangkan yang sama dengan cara parsemysql.py|sort|uniq|wc -l, hasilnya 20739 baris. Jauh banget euiii… kalo gini caranya, ya pake memcached dong….

admin General