Archive for the 'วิธีแก้ปัญหาเขียนโปรแกรม' Category

วิธีเปลี่ยน innodb_log_file_size เพื่อลดปัญหา freeing items

ผมเคยเจอปัญหา updating / freeing items ขึ้นใน table innodb ตอนแรกก็ไม่เอะใจนึกว่าเป็นที่ innodb แต่พอหลังๆกาง updating / freeing items นั้นเกิดขึ้นบ่อยแล้ว แล้วกินเวลา 2-3 วินาทีตลอด เลยทำให้ส่งสัยแล้วหาวิธีแก้ พอไปอ่านมามีคนบอกใน Stackoverflow ว่าให้ลองเปลี่ยน innodb_log_file_size สรุปหายครับ ! ผมเลยเอาวิธีเปลี่ยนมาบอกกับเพื่อนกันครับ

  1. ทำการ Backup Table ที่เป็น Innodb ครับแล้ว drop table ทิ้งไปหรือไม่ก็เปลี่ยนเป็น MyIsam ก่อน
  2. Stop MySQL
  3. เข้าไปแก้ไข my.cnf ครับโดยผมมีตัวอย่างเป็นแบบนี้ครับ
    innodb_data_file_path           = ibdata1:128M;ibdata2:10M:autoextend
    innodb_log_file_size            = 512M  #64G_RAM+ = 768, 24G_RAM+ = 512, 8G_RAM+ = 256, 2G_RAM+ = 128
    innodb_log_files_in_group       = 4 #combined size of all logs <4GB. <2G_RAM = 2, >2G_RAM = 4
  4. เข้า SSH ไปที่ /var/lib/mysql/ (centos) จะเห็นไฟล์ที่ขึ้นต้นด้วย ib_logfile , ibdata ให้ backup ไว้ก่อนแล้วลบออกจาก directory นั้นทั้งหมด
  5. Start MySQL ถ้าทำถูกมันจะสามารถ start ได้ครับ
  6. เสร็จแล้ว import ข้อมูลกลับเข้ามาครับ หรือถ้าใครเปลี่ยนเป็น myisam ไว้ก็เปลี่ยนเป็น innodb ครับเป็นอันเสร็จ

จากประสบการณ์ตรงนั้นการเปลี่ยน innodb_log_file_size จาก default นั้นทำให้ปัญหา freeing items , updating , inserting หมดไปใน table ขนาด 13GB ครับผม

ปล. ผมปรับ innodb_flush_log_at_trx_commit = 0 แทน 2 ด้วยครับ

วิธีตรวจสอบว่าใช้ Harddisk ไปเท่าไรแล้วบน Linux

เข้าไปใน SSH ใช้คำสั่ง

df -h

จะโชว์ออกมาทุก drive ว่ามี drive อะไรบ้างและแต่ละ drive เป็น file system แบบไหนใช้ไปเท่าไรเหลือเท่าไร
อยากดูเป็น Folder ก็จัดไป

du -sh /home/

ถ้าอยากดู Subfolder ทั้งหมดก็ใช้แบบนี้

du -sh /home/*

สรุปคำสั่ง ‘df’ เอาไว้ดูภาพรวมของ Disk ทั้งหมด ถ้าอยากหาเฉพาะ folder นั้นๆใช้พื้นที่เท่าไร ให้ใช้ ‘du -sh’

แปลจาก
http://knowledgelayer.softlayer.com/questions/202/How+can+I+check+my+hard+disk+usage+in+Linux%3F

วิธียกเลิก fulltext stopword ใน MySQL

ยิ่งอยู่กับ Fulltext นานจึงรู้จักดีขึ้นเจอปัญหาที่ต้องแก้มากขึ้น เลยทำให้รู้ว่า คำว่า “Me” เป็นคำที่อยู่ใน Stopword แถมมีคำอื่นๆอีก ที่เราอาจจะต้องใช้หาใน Fulltext ผมเลยต้องการ Disabled Stopword ทั้งหมดแล้วปล่อยให้เป็นหน้าที่ของ ft_min_word_len กับ ft_max_word_len เป็นตัวทำ index ก็พอ เรามาดูวิธียกเลิกบน centos กัน

 

  1. เข้าไปที่ไฟล์ /etc/my.cnf เพิ่ม
    [mysqld]
    ft_stopword_file=”"
    [myisamchk]
    ft_stopword_file=”"
    โดยเหตุผลที่เพิ่มใน mysqld เพื่อบอก mysql ว่าหลังจากนี้ไม่ต้องใช้ stopword ละนะ แล้วที่เราบอก myisamchk เพื่อบอกว่า เวลา repair ให้ใช้ config นี้แทนแบบ default นะทำให้เมื่อเรา REPAIR TABLE `tbl` QUICK แล้วมันจะได้ไม่ใช้ stopword
  2. Restart MySQL
  3. ไปใน Database ที่มี Table Fulltext แล้วใช้คำสั่ง “REPAIR TABLE `table` QUICK” เป็นอันเสร็จครับ

ส่วนใครต้องการศึกษาวิธีเปลี่ยน ft_min_word_len , ft_max_word_len ก็เป็นแบบเดียวกันครับ ยกตัวอย่างเช่น

[mysqld]
ft_min_word_len=2
ft_max_word_len=56
ft_stopword_file = “”; #Disable Stopword String

[myisamchk]
ft_min_word_len=2
ft_max_word_len=56
ft_stopword_file = “”; #Disable Stopword String

เป็นต้นครับโดยต้องขอบคุณ Reference ทั้งสองที่นี้ไว้ด้วยครับ

http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

http://www.network-technologies.org/Projects/Virtual_Brain_Online.php/article/rebuild_repair_alter_MySQL_FULLTEXT_index/

« Previous PageNext Page »