<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>DominixZ : Live Smart &#38; Geeky &#187; เคล็คลับซอฟต์แวร์</title> <atom:link href="http://www.dominixz.com/blog/category/software-tips/feed/" rel="self" type="application/rss+xml" /><link>http://www.dominixz.com/blog</link> <description>Productivity , Techology News ,Website Review , Web Standard , Live Smart and Geeky</description> <lastBuildDate>Wed, 08 Feb 2012 16:59:00 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>ทำไมเราควรใส่ Comment ใน SQL Query</title><link>http://www.dominixz.com/blog/show-idea/why-you-should-comment-in-sql-query/</link> <comments>http://www.dominixz.com/blog/show-idea/why-you-should-comment-in-sql-query/#comments</comments> <pubDate>Mon, 30 Jan 2012 18:33:11 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[นำเสนอไอเดีย]]></category> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1571</guid> <description><![CDATA[จากการลองผิดลองถูกปัญหาหนึ่งที่ประสบเจอมาคือ &#8220;เฮ้ย Query นี้มาจากส่วนไหนของ Code ฟระ ! ทำไมมันช้าจัง&#8221; เนื่องจากระบบผมประสบปัญหามันช้า แล้วเราแทบจำไม่ได้แล้วว่า query นี้มันอยู่ส่วนไหนของ app ดังนั้น ขอเขียนเป็นคำแนะนำสำหรับคนที่กำลังจะทับ App ใหญ่ที่มีความซับซ้อนมี การทำ Report ให้ใส่ Comment ใน  Query สักหน่อยอย่างเช่นในตัวอย่าง สังเกตุได้ว่าการใส่ Comment ไว้ในข้างหน้าหรือข้างหลัง Query จะทำให้เราบอกได้ว่าจริงๆ Query นี้มาจากที่ไหน โดยถ้าเป็นผมจะตั้ง Comment แบบนี้ /* [OBVOC] application/model/page.php @ function get_by_date */ ประมาณนี้คือ &#8220;[ชื่อapp] ชื่อไฟล์ @ function ไหน&#8221; หรือถ้าไม่ได้เขียนเป็น function หรือใน function มีการทำหลาย query ก็ใส่ (1) [...]]]></description> <content:encoded><![CDATA[<p>จากการลองผิดลองถูกปัญหาหนึ่งที่ประสบเจอมาคือ &#8220;เฮ้ย Query นี้มาจากส่วนไหนของ Code ฟระ ! ทำไมมันช้าจัง&#8221; เนื่องจากระบบผมประสบปัญหามันช้า แล้วเราแทบจำไม่ได้แล้วว่า query นี้มันอยู่ส่วนไหนของ app ดังนั้น ขอเขียนเป็นคำแนะนำสำหรับคนที่กำลังจะทับ App ใหญ่ที่มีความซับซ้อนมี การทำ Report ให้ใส่ Comment ใน  Query สักหน่อยอย่างเช่นในตัวอย่าง</p><p><a
href="http://www.dominixz.com/blog/wp-content/uploads/2012/01/Screen-Shot-2555-01-30-at-4.04.12-PM.png"><img
class="aligncenter  wp-image-1572" title="Screen Shot 2555-01-30 at 4.04.12 PM" src="http://www.dominixz.com/blog/wp-content/uploads/2012/01/Screen-Shot-2555-01-30-at-4.04.12-PM.png" alt="" width="563" height="50" /></a></p><p>สังเกตุได้ว่าการใส่ Comment ไว้ในข้างหน้าหรือข้างหลัง Query จะทำให้เราบอกได้ว่าจริงๆ Query นี้มาจากที่ไหน โดยถ้าเป็นผมจะตั้ง Comment แบบนี้</p><blockquote><p>/* [OBVOC] application/model/page.php @ function get_by_date */</p></blockquote><p>ประมาณนี้คือ &#8220;[ชื่อapp] ชื่อไฟล์ @ function ไหน&#8221; หรือถ้าไม่ได้เขียนเป็น function หรือใน function มีการทำหลาย query ก็ใส่ (1) , (2) , (3) ไปก็น่าจะ ok แล้วผมว่าใครมีวิธีการ comment แบบไหนให้หาได้ง่ายก็มา share กันนะครับ โดยสรุปข้อดีในการ Comment ใน Query คือ</p><ul><li>เวลาทำ DB Performance Tuning ทำให้หาส่วนที่ทำให้เกิด Query ช้านี้ได้ทันทีว่ามาจาก app ไหน</li><li>ทำเป็น Remark ได้ว่า Query นี้จุดประสงค์เอาไว้ทำอะไร</li><li>คนที่มาทำงานต่อสามารถรู้ได้ทันที ว่าถ้าจะแก้ไข Query นี้ต้องไปแก้ที่ไหน</li></ul> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/geek-tips/condition-if-subuqery-mysql-for-your-result/" rel="bookmark" title="April 24, 2011">วิธีใช้เงื่อนไข IF , Sub-Query ฯลฯใน MySQL เพื่อให้ได้ผลลัพธ์ที่ต้องการ</a></li><li><a
href="http://www.dominixz.com/blog/geek-tips/software-architecutre-design-coding-optimize/" rel="bookmark" title="August 4, 2008">Software Architecutre , Design , Coding และ Optimize</a></li><li><a
href="http://www.dominixz.com/blog/review/website/pantip-3g-in-dominixz-style/" rel="bookmark" title="January 30, 2011">ออกแบบ Pantip 3G ในรูปแบบของโดมินิค</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/show-idea/why-you-should-comment-in-sql-query/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Tuning MySQL : Case Study OBVOC/OBHUNTER</title><link>http://www.dominixz.com/blog/programming-solution/tuning-mysql-case-study-obvoc-obhunter/</link> <comments>http://www.dominixz.com/blog/programming-solution/tuning-mysql-case-study-obvoc-obhunter/#comments</comments> <pubDate>Tue, 13 Sep 2011 15:22:47 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[VPS]]></category> <category><![CDATA[วิธีแก้ปัญหาเขียนโปรแกรม]]></category> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1409</guid> <description><![CDATA[เนื่องจากผมไม่รู้จะยก Case ไหนดีมาเป็นตัวอย่างการทดลองให้ดู ผมก็เลยยก Case ที่พึงเกิดขึ้นกับตัวสดๆร้อนๆคือการ Tuning MySQL สำหรับระบบ Bot Monitoring บนโลก Online โดยคราวนี้หนักกว่าเดิมคือปกตินั้น Server จะมีแค่ OBVOC กับ Sodia เท่านั้นที่ดูแลแต่วันนี้มันมี OBHUNTER ซึ่งตอนแรกอยู่เครื่องภายในแต่วันนี้มันได้มาอยู่บน Server จริงๆแล้ว อธิบายง่ายๆเหมือนมี Transaction เพิ่มขึ้นมากกว่าเดิม 3 เท่า !! ดังนั้นเรื่องที่ผมจะยกขึ้นมาวันนี้คือเรื่องนี้ครับ โดยสภาพแวดล้อมคร่าวๆมีดังนี้ OS : Centos 5 with DirectAdmin PHP 5.3.8 , MySQL 5.1 Server : CPU 8 Core , Ram 16GB , HDD 250GB ผมโชคดีอย่างหนึ่งที่ได้ [...]]]></description> <content:encoded><![CDATA[<p>เนื่องจากผมไม่รู้จะยก Case ไหนดีมาเป็นตัวอย่างการทดลองให้ดู ผมก็เลยยก Case ที่พึงเกิดขึ้นกับตัวสดๆร้อนๆคือการ Tuning MySQL สำหรับระบบ Bot Monitoring บนโลก Online โดยคราวนี้หนักกว่าเดิมคือปกตินั้น Server จะมีแค่ OBVOC กับ Sodia เท่านั้นที่ดูแลแต่วันนี้มันมี OBHUNTER ซึ่งตอนแรกอยู่เครื่องภายในแต่วันนี้มันได้มาอยู่บน Server จริงๆแล้ว อธิบายง่ายๆเหมือนมี Transaction เพิ่มขึ้นมากกว่าเดิม 3 เท่า !! ดังนั้นเรื่องที่ผมจะยกขึ้นมาวันนี้คือเรื่องนี้ครับ โดยสภาพแวดล้อมคร่าวๆมีดังนี้</p><ul><li>OS : Centos 5 with DirectAdmin</li><li>PHP 5.3.8 , MySQL 5.1</li><li>Server : CPU 8 Core , Ram 16GB , HDD 250GB</li></ul><p>ผมโชคดีอย่างหนึ่งที่ได้ Server ใหม่มา ไม่งั้นไม่มีทางทำสำเร็จได้แน่ในคราวนี้ โดยปัจจัยแรกที่สำคัญสำหรับระบบที่ใหญ่ขึ้นคือ &#8220;Server&#8221; แต่กระนั้น เราจะรู้ได้ไงลองไปอ่าน <a
href="http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development" target="_blank">โพสนี้</a>ดูนะครับ เสร็จแล้วคราวนี้พอมีเครื่องที่พร้อม แต่เชื่อเถอะว่า ถึงแม้มันจะพร้อมแต่บางครั้งคุณก็ไม่สามารถปรับ Performance ให้สุดได้เพราะ Ram นั้นต่อให้มี 128GB ถ้าเรา config มั่วๆก็หมดได้อยู่ดีครับ ลองดู Case ผมเป็นตัวอย่างแล้วกันครับ โดยผมจะบอกเรื่องราวก่อนและหลัง แล้วตอนท้ายไปชม Video กันนะครับ</p><p><strong>ก่อนหน้านี้ที่มี OBVOC ตัวเดียว</strong></p><ul><li>มีการอัพเดต Row ที่ขนาด 10kb ขึ้นไปเพราะเป็นการดูดกระทู้ เช่น Pantip , Sanook  เข้าระบบ</li><li>ใช้ MyISAM Fulltext เพราะ Implement ได้ง่ายกว่า Sphinx , Solr แต่ปัญหาคือ Index จำนวนมาก</li><li>ข้อมูลเริ่มเต็ม Table เดียวก็ 16gb แล้ว</li><li>ถึงแม้จะ insert / update บ่อยแต่ก็ยังรับไว้ในเครื่อง ram 3gb</li><li>เวลาจะดู Dashboard ในหน้า OBVOC บางครั้งใช้เวลาถึง 30-60 วินาที</li></ul><p><strong>หลังมี OBVOC และ OBHUNTER ร่วมกัน</strong></p><ul><li>Transaction มากกว่าเดิม 3 เท่า</li><li>มีการ Access Disk มากกว่าเดิมมากๆ เพราะ OBHUNTER เป็นการอัพเดตข้อมูลไม่เล็กไม่ใหญ่ แต่ถี่ๆ เช่นตัด comment จาก pantip ออกมา insert</li><li>Table ที่โตวันโตคืนเป็นคู่แข่ง table ของ obvoc ทำให้ไฟล์ใหญ่ขึ้นมาก</li><li>OBHUNTER ได้ใช้สถาปัตยกรรมคล้ายๆกับ OBVOC ก็คือใช้ Fulltext ซึ่งปัญหาคือ Index มันมากๆๆๆ กว่าเดิมเข้าไปอีก</li><li>ระบบทั้งหมดช้าลง แล้วเกิดอาการ Hang เพราะมีการ Access Disk เยอะจนไม่สามารถแม้กระทั่งเข้า FTP/SSH (Write Access 99%)</li><li>บางครั้งต้อง Repair พร้อมกับเปิด Service เพราะกลัวเรื่องข้อมูลเก็บได้ไม่หมดจากบน Social Media</li></ul><p><strong>ปัญหาที่เกิดระหว่างการ Tuning</strong></p><ul><li>ลองผิดลองถูก ทำให้บางครั้งการแก้ปัญหาไม่ถูกจุดทำให้ระบบแย่กว่าเดิมต้อง Restart VM กันเลย</li><li>เจอ Bug ที่ประหลาดมากนั้นคือ &#8220;Crond&#8221; เกิดขึ้นมาเป็นจำนวนมากกว่า &gt; 1000 เคยหลับไปแล้วตื่นขึ้นมา ram 16gb เต็ม งงกันไปเลย</li><li>Table ขนาด 16gb พังแค่กด stop start mysql ! ได้บทเรียนว่าก่อน start stop ควร kill ทุก process ที่เข้ามาใน db ไม่งั้นมีโอกาสพัง confirm !! (โดยพี่ @icez บอกเพิ่มอีกนิดว่าอาจจะเป็น Distro ของผมที่ใช้ Centos with DirectAdmin ทำให้มันรวนได้ง่ายขนาดนี้ ดังนั้นใครลง Distro แนะนำว่าลงเองดีกว่า !! ถ้าคิดการใหญ่)</li><li>การ Repair Table แบบผิดวิธีคือ เข้าใจผิดว่า Repairing by Keycache นั้นเร็วกว่า Repairing by Sorting จริงๆผิดครับ Sorting เร็วกว่า แล้วถ้าจะให้ดีต้องมี Thread ด้วย ดังนั้นก่อน Repair ควรปรับ config key_buffer_size=2048M sort_buffer_size=2048M read_buffer_size 512 แล้วก็ write_buffer_size 512 ไม่งั้นช้ามาก + ผลพวงที่ไม่ทำแบบนี้อาจทำให้เกิด Write Access 99% ทำให้ server พังเดี้ยงได้ อาจะเพิ่มเติมได้ที่ <a
href="http://venublog.com/2010/01/04/performance-comparison-of-repair-by-sorting-or-by-keycache/" target="_blank">ลิงค์นี้</a></li><li>ระหว่าง config มั่วๆถ้าไม่ set connection timeout แล้วละก็ ram จะหมดรวดเร็วอย่างไม่รู้ตัว (ของผมหมดเร็วเห็นได้ชัดเพราะบอทมันกระหน่ำเข้ามา) โดยตอนนี้ ผมเลยปรับ config เป็นแบบนี้เลย interactive_timeout=100 , wait_timeout=100 ,connect_timeout=10</li><li>การปรับ Tuning MySQL ไม่ดีดูง่ายๆ ถ้าปิด MySQL แล้วระบบมีการ Write Access เท่าไร แล้วเมื่อเปิด MySQL เท่าไร ถ้าเลขมันมากหลังเปิด MySQL นั้นและชัดเจน !</li><li>ถ้ายังอยากใช้ MySQL ต่อไปต้องเข้าใจ InnoDB กับ MySQL โดยผมเจอปัญหาหนึ่งที่แก้เท่าไรก็ไม่ได้สุดท้ายเลยต้องเปลี่ยน Storage Engine ถึงบรรเท่าปัญหานี้ได้</li><li>low_priority_updates = 1 นี้คือท่าสุดท้าย สำหรับคนใช้ MyISAM ถ้าแก้ปัญหาไม่ได้สักที ลองเปลี่ยน config นี้ดูครับ โดยเป็นการให้ความสำคัญกับ UPDATE SQL น้อยลงครับ โดยปกติแล้ว UPDATE จะสำคัญกว่า SELECT ที่มันน่าเซ็งก็คือ ถ้า UPDATE มาแล้วมี SELECT ตาม UPDATE จะช้าลงครับ (มันคือเรื่องจริงครับลองมาเยอะแล้วสำหรับ MyISAM) โดยถ้าปกติมีอย่างใดอย่างหนึ่งจะเร็วทั้งคู่แต่ถ้ามาพร้อมกันเมื่อไร ช้าเลย Lock ด้วย ผมเลยแก้ปัญหาคือให้ SELECT ไปก่อน เพราะถ้าเรา Tuning ดีแล้ว SELECT จะเร็วปรี๊ดแล้วระบบก็จะได้เอาเวลาไปทำ UPDATE ได้เร็วกว่าเดิม ลองแล้ว confirm ว่าเร็วกว่าให้มันเป็นแบบปกติใน Table MyISAM แต่มีผลเสียคือ <strong>&#8220;บางครั้ง User กด Update ไปแล้ว แต่มันไม่ได้ทำงานทันที เลยเห็นเป็นข้อมูลเก่าอยู่ๆทั้งที่ส่ง request ไปแล้ว&#8221;</strong></li><li>Log คือศัตรูตัวฉกาจสำหรับระบบที่มีการ Insert/Update เยอะๆ เพราะมันคืออีก 1 ตัวที่ทำให้เกิด Write Access ว่ากระนั้นผมเลยปิด Log หมดเลย (แต่ปิดตอนที่เริ่ม Tuning เริ่มดีแล้วนะ ไม่ใช่ปิดแต่เริ่ม) ผมปิดหมดเลยครับทั้ง log-queries-not-using-indexes , log , log-slow-queries , log_error , log_warnings ปิดหมด แต่ตัวที่ห้ามปิดเด็ดขาดคือ log_bin เพราะเจ้านี้สำคัญมากเวลาจะกู้ข้อมูลจากการ Repair ดังนั้นอย่าปิดยอมๆไป</li><li>MySQL.. ERROR! Manager of pid-file quit without updating file. เวลา restart mysql นั้นส่วนใหญ่มาจากเขียน config ซะมากกว่า pid ตัวนั้นค้างอยู่ในระบบ</li><li>Read Buffer Size เป็นตัวเดียวที่ใส่เป็นแค่ 8MB ก็เพียงพอแล้ว ที่เหลือต้องแล้วแต่ระบบ</li><li>การทำ Index เยอะใช่ว่าจะดี เพราะมันคือการเพิ่ม Write Access !!!! ดังนั้นถ้าตัวไหนไม่ค่อยได้ใช้ให้ Remove Index ทิ้งซะ ผมดันสร้างตัวทำ autoindex มันเลยทำ index ให้ทุก field เลยผลที่ได้ช่วงแรกคือเร็ว แต่พอระบบใหญ่ก็เป็นดังที่เห็น &gt;.&lt;&#8217;</li><li>หลงผิดเชื่อในค่าตัวเลข ที่ฝรั่งแนะนำว่าอย่าเกินเท่านี้นะ มันจะมีผลต่อ Performance Issue ทำให้เราไม่กล้าปรับ จนสุดท้ายมันก็ต้องปรับ แล้วมันก็ดีขึ้นจริงๆด้วย !!</li><li>กด Repair Table ไปแล้ว Bug Crond มันเกิดขึ้น ไม่มีหน้าจอที่เข้า SSH ไว้สุดท้ายเลยต้องมานั่ง Kill มือเพราะมันเกิดตอนจังหวะ Repair Table ไปแล้ว 3 ชั่วโมง !! + ทำใหม่มาหลายรอบเลยใช้ DirectAdmin ช่วยแล้วก็ใช้ jQuerify ของ Firefox เข้าช่วยโดย login เป็น root แล้วเปิดไปหน้าที่มี crond เยอะๆแล้วพิมพ์ตัวนี้ลงไปใน firebug console &#8220;$(&#8220;tr td.list:contains(&#8216;crond&#8217;)&#8221;).each(function(){ $(&#8220;input&#8221;,$(this).parent()).attr(&#8220;checked&#8221;,true) });$(&#8220;tr td.list2:contains(&#8216;crond&#8217;)&#8221;).each(function(){ $(&#8220;input&#8221;,$(this).parent()).attr(&#8220;checked&#8221;,true) });&#8221; เสร็จแล้วคลิก kill แล้วกดลบ</li><li>Optimize Table ทำให้เร็วขึ้นมหาศาลอย่างเห็นได้ชัด แต่ถ้ายัง Tuning ไม่นิ่งก็อย่าพึง Optimize เลยเพราะถ้า Alter หรือ Repair ก็ต้องกดใหม่อยู่ดี</li></ul><p><strong>ความโชคดีที่ผมหาความต้องการของระบบผมเจอ</strong></p><ul><li>ระบบผมมีคนใช้แค่ 10-20 คนเท่านั้น ที่เหลือเป็นบอท ทำให้ Max Connection สามารถปรับลดลงได้</li><li>ผมมี Key Size ทั้งหมด 6.8GB โดยผมลองปรับเรื่อยๆจนมาลงตัวที่ 3GB ซึ่งคลอบคลุม 95% ของระบบแล้ว ซึ่งพอแล้วเอา Ram ไปเพิ่มตัวอื่น</li><li>ผมรู้ว่าระบบผมมีการ JOIN และ SORT บ่อยมาก ผมเลยค่อยๆเพิ่มค่า Buffer และ Test จนลงตัว</li><li>Coding บางส่วนมีผลต่อ Performance ของระบบมาก โชคดีที่ผมเขียนมันขึ้นมาเองเลยจำได้ว่าอยู่ส่วนไหน เลยแก้ได้ถูกจุด</li></ul><p>บทสรุปของการ Tuning ในครั้งนี้ คือเราต้องคอย Monitor ตัวเลขต่างๆ ค่อยๆปรับทีละนิดละนิด โดยแต่ละครั้งที่จะ stop อย่าลืม kill ตัวที่มันมา access database ก่อน แล้วคอยใช้คำสั่ง top ของ linux ดูด้วยว่า write access ลดลงแล้วหรือยังกับการ insert/update ปริมาณเดิม ถ้าไม่ลดต้องปรับใหม่ โดยอย่าให้มัน Write Access ทุก Core เยอะกว่า 30% (แต่ถ้ามัน 99% ไม่เกินครึ่งหนึ่งของจำนวน CPU core ก็ปล่อยๆมันไปได้) สุดท้ายท้ายสุดก็คืออย่าใช้ทั้ง Server เกิน 60-70% ของ RAM (ต้องลอง run สัก 24 ชั่วโมงด้วย) เพราะถ้าเหลือพื้นที่ RAM ไว้น้อยกว่านี้เมื่อเกิดมี process ตัวใดเกิดขึ้นแล้วกิน ram เราไปจนหมด เราเข้า SSH/FTP แถม Write Access 99% ผลสุดท้ายคือต้องโทรไปบอกทาง Server ว่ากด Restart ที่เครื่องให้หน่อย ทำให้เกิดความล่าช้าในการ Tuning แถมระบบก็ล่มหมดอีกคราวนี้ ไม่คุ้มกันนะ ที่เหลือก่อนไปชม video ด้านล่างกันผมขอพูดคำๆหนึ่งเลยว่า</p><blockquote><p
style="text-align: center;">Tuning ต้องวิเคราะห์และค่อยๆปรับไปทีละนิด ความเชื่อที่เรา Search จาก Internet บางครั้งก็ไม่จริงเสมอไป เราต้องทดลองทำด้วยตัวเอง เพราะปัญหาของเรา บางทีไม่ใช่ปัญหาที่เขาเคยเจอ</p></blockquote><p><span
style="color: #ff0000;">ข้อควรจำ : อย่าใช้ RAM เกิน 70% โดยไม่จำเป็น , อย่าให้เกิด Write Access มากๆเป็นเวลานาน</span></p><p><a
href="http://dominixz.com/blog/files/first_obvoc_my.cnf.txt" target="_blank">My.cnf ที่ Tuning ในครั้งแรกของ OBVOC</a><br
/> <a
href="http://dominixz.com/blog/files/my.cnf_16GB.txt" target="_blank">My.cnf ที่ลองใช้ตาม Internet แต่ไม่ได้ผลใน case นี้</a><br
/> <a
title="OBVOC OBHUNTER MySQL Config for frequency insert/update text field" href="http://dominixz.com/blog/files/obsa_sep_2011_my.cnf.txt" target="_blank">My.cnf ตัวสุดท้ายที่ใช้อยู่​ณ ปัจจุบันนี้</a></p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/programming-solution/tuning-mysql-trace-yourself-and-understand-variable/" rel="bookmark" title="September 11, 2011">Tuning MySQL : สำรวจตัวเองและเข้าใจตัวแปร</a></li><li><a
href="http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development/" rel="bookmark" title="August 15, 2011">ประสบการณ์ 8 ข้อที่อยากให้เด็กรุ่นใหม่รู้กับการทำ Web Development</a></li><li><a
href="http://www.dominixz.com/blog/geek-tips/increase-speed-mysql-fulltext-order-by-with-this-mindset/" rel="bookmark" title="May 5, 2011">วิธี Search MySQL ด้วย Fulltext Order By Query เร็วและแรง</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/programming-solution/tuning-mysql-case-study-obvoc-obhunter/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Tuning MySQL : สำรวจตัวเองและเข้าใจตัวแปร</title><link>http://www.dominixz.com/blog/programming-solution/tuning-mysql-trace-yourself-and-understand-variable/</link> <comments>http://www.dominixz.com/blog/programming-solution/tuning-mysql-trace-yourself-and-understand-variable/#comments</comments> <pubDate>Sun, 11 Sep 2011 02:47:04 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[VPS]]></category> <category><![CDATA[วิธีแก้ปัญหาเขียนโปรแกรม]]></category> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1407</guid> <description><![CDATA[เนื่องจากว่าอาทิตย์ที่ผ่านมาผมคลุกคลีอยู่กับการปรับปรุงประสิทธิภาพของ MySQL ซึ่งการทำครั้งนี้ก็ประสบความสำเร็จไปได้ดี โดยผมตั้งใจจะนำความรู้มาให้กับ คนรุ่นใหม่ที่คิดการใหญ่ แต่ติดปัญหา Database ช้ารองรับคนเข้าไม่ได้เยอะ หรือเจอปัญหาเฉพาะทางอย่างของผมที่มีการอัพเดตอยู่ตลอดเวลา Table บวม 16gb ทำยังไงให้มันเร็วได้บ้าง โดยวันนี้ผมขอ Scope เฉพาะเรื่องการค้นหาปัญหาก่อน ที่จะ Tuning ดังนั้น ถึงแม้เราจะมีเครื่องที่มีประสิทธิภาพแค่ไหน แต่ถ้าเราไม่รู้สาเหตุที่แท้จริงก็ทำให้เร็วขึ้นไม่ได้ เครื่องมือสำคัญมีดังนี้ phpMyAdmin MySQLTuner MySQL Tuning Primer Optimize only fragmented tables in MySQL โดย 2 ตัวล่างเราต้องมี SSH เพื่อเข้าไปสั่งมันรันด้วย perl กับ sh ได้นะครับ โดยวิธีใช้ก็เรียกชื่อไฟล์นั้นตรงๆ (ข้ออนุญาติไม่สอนแต่มันไม่ยากเลยนะ ) เสร็จแล้วเราจะเจออะไรทำนองแบบใน ลิงค์นี้ ทีนี้เราต้องทำความเข้าใจว่าทำไม Query เราช้าเป็นเพราะอะไร ดังนั้นก่อนจะสำรวจตัวเองคุณต้องเข้าใจเรื่องหลักๆของ MySQL หรือ RDBMS ทั่วไปและ [...]]]></description> <content:encoded><![CDATA[<p>เนื่องจากว่าอาทิตย์ที่ผ่านมาผมคลุกคลีอยู่กับการปรับปรุงประสิทธิภาพของ MySQL ซึ่งการทำครั้งนี้ก็ประสบความสำเร็จไปได้ดี โดยผมตั้งใจจะนำความรู้มาให้กับ คนรุ่นใหม่ที่คิดการใหญ่ แต่ติดปัญหา Database ช้ารองรับคนเข้าไม่ได้เยอะ หรือเจอปัญหาเฉพาะทางอย่างของผมที่มีการอัพเดตอยู่ตลอดเวลา Table บวม 16gb ทำยังไงให้มันเร็วได้บ้าง โดยวันนี้ผมขอ Scope เฉพาะเรื่องการค้นหาปัญหาก่อน ที่จะ Tuning ดังนั้น ถึงแม้เราจะมีเครื่องที่มีประสิทธิภาพแค่ไหน แต่ถ้าเราไม่รู้สาเหตุที่แท้จริงก็ทำให้เร็วขึ้นไม่ได้ เครื่องมือสำคัญมีดังนี้</p><ul><li>phpMyAdmin</li><li><a
title="MySQL Tuner " href="http://mysqltuner.pl/mysqltuner.pl" target="_blank">MySQLTuner</a></li><li><a
title="MySQL Performance Tuning Primer" href="http://www.day32.com/MySQL/tuning-primer.sh" target="_blank">MySQL Tuning Primer</a></li><li><a
href="http://meinit.nl/optimize-only-fragmented-tables-mysql">Optimize only fragmented tables in MySQL </a></li></ul><p>โดย 2 ตัวล่างเราต้องมี SSH เพื่อเข้าไปสั่งมันรันด้วย perl กับ sh ได้นะครับ โดยวิธีใช้ก็เรียกชื่อไฟล์นั้นตรงๆ (ข้ออนุญาติไม่สอนแต่มันไม่ยากเลยนะ <img
src='http://www.dominixz.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) เสร็จแล้วเราจะเจออะไรทำนองแบบใน <a
href="http://www.unix.com/web-programming/75618-mysql-tuning-tools-mysqltuner-pl-tuning-primer-sh.html" target="_blank">ลิงค์นี้</a> ทีนี้เราต้องทำความเข้าใจว่าทำไม Query เราช้าเป็นเพราะอะไร ดังนั้นก่อนจะสำรวจตัวเองคุณต้องเข้าใจเรื่องหลักๆของ MySQL หรือ RDBMS ทั่วไปและ Server กันก่อน ผมจะขอรวบรัดใครอยากรู้ลึกๆไปศึกษากันต่อนะครับ</p><ul><li>เวลาเรา Query ข้อมูลปกตินั้นก็เหมือนเรามีกองเอกสารที่ไม่ได้มีการจัดเรียงวางกองๆไว้ เวลาจะหาเราก็เลยต้องรื้อถึงจะเจอ ทำให้ไม่มีประสิทธิภาพ</li><li>ถ้าเรานำเอกสารมาเรียงๆก็สามารถถูกหาได้ง่ายขึ้นกว่ากองเอกสารมั่วๆ สิ่งนี้ใน MySQL เรียกว่า <strong>&#8220;Optimize Table&#8221; </strong>โดย Script ที่ผมนำมาใช้คือ Optimize เฉพาะ Fragment หรืออันที่ไม่ได้มีการเรียงข้อมูล ซึ่งเราจะพบได้ง่ายมากใน Table ขนาดใหญ่ ยังไงก็ระวังกันนิดหนึ่งคือถ้าไป Optimize Table ใหญ่ก็เสียเวลาหน้าดู<strong><br
/> </strong></li><li>ต่อให้เรียงแล้วแต่ถ้าเราอยากจะหาเอกสาร ABC ได้ง่ายขึ้นเราก็จะแปะ PostIt สีๆให้ออกมาข้างๆหรือใส่ที่คั่นหนังสือใน DB เราเรียกว่า <strong>&#8220;Index&#8221;</strong></li><li>แต่การจะหยิบข้อมูลเอกสารพร้อมๆกันหลายๆอันได้นั้นจะต้องมีความจำที่เพียงพอว่าแต่ละเอกสารนั้นอยู่ที่ไหน (Index อยู่ไหน) ทำให้ต้องใช้ความจำเข้ามา แล้วถ้าเราจำที่อยู่ของแต่ละเอกสารนั้นไม่ได้ เราก็ต้องค่อยๆเปิดทีละกองสองกอง (Key Buffer &lt; Key Index ) ทำให้ช้าลง</li><li>อีกเรื่องที่ทำให้ช้าได้คือ <strong>&#8220;พื้นที่โต๊ะไม่พอ&#8221;</strong> เหมือนกองเอกสารที่เราเก็บใส่แฟ้มแล้วไปว่างไว้ที่อื่น แต่ไม่ใช่บนโต๊ะเวลาจะนำมาใช้ก็ต้องเดินไปหยิบ ดังนั้นถ้าโต๊ะเราสามารถเก็บกองเอกสารทั้งหมดได้ เราก็ไม่ต้องเดินไปหยิบพอเต็มก็ทำให้เสร็จ แล้วก็เดินไปหยิบใหม่ นั้นเป็นที่มาของ <strong>&#8220;tmp_table_size&#8221;</strong></li><li>ส่วนตัวแปรอื่นๆที่มีผลในการทำเอกสารนั้นประกอบด้วย การอ่านเอกสาร (read_buffer_size) , การเรียงเอกสาร (sort_buffer_size) , การรวมเอกสาร (join_buffer_size) และการอ่านเอกสารที่สุ่มมา (<a
href="http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/" target="_blank">read_rnd_buffer_size</a>) โดยอันสุดท้ายมักจะเยอะขึ้นถ้ามีการ ORDER BY เยอะๆ</li><li>สุดท้ายการจะทำงานได้เร็วคุณต้องทำงานเป็นทีมดังนั้น อย่าลืมจ้างพนักงานเพิ่ม​โดยต้องจ่ายเป็นเงินเดือน (CPU/Mem) โดยพนักงานมีชื่อเรียกใน DB ว่า (thread_concurrency) ถ้าเราอยากให้ผู้ช่วยเก่งๆ ก็ต้องฝึก การอ่านเอกสาร (read_buffer_size) , การเรียงเอกสาร (sort_buffer_size) , การรวมเอกสาร (join_buffer_size) และการอ่านเอกสารที่สุ่มมา (<a
href="http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/" target="_blank">read_rnd_buffer_size</a>) ซึ่งยิ่งพนักงานเก่งก็ต้องยิ่งจ่ายแพง (จ่ายแพงโดยเฉพาะ Memory)</li></ul><p>หลักๆการ Tuning MySQL ก็จะมีเรื่องประมาณนี้ครับ โดยเราไปดูวิธีตรวจสอบว่าส่วนไหนของระบบเราช้ากันครับ โดยจะเป็นภาษาเทคนิค ถ้าฟังไม่เข้าใจก็ขออภัยนะครับ &gt;.&lt;</p><p
style="text-align: center;"><iframe
width="560" height="345" src="http://www.youtube.com/embed/HGbjnhvkSVI" frameborder="0" allowfullscreen></iframe></p><p
style="text-align: left;">จบไปแล้วกับการอธิบายวิธีดูว่าส่วนไหนช้าและตัวแปรแต่ละตัวใน my.cnf เอาไว้ทำอะไร โดยผมเอาต้นแบบ config มาจาก <a
href="http://datastrangler.com/windpipe/2011/02/24/custom-mysql-config-files-to-ensure-maximum-performance/" target="_blank">Custom MySQL for ensure maximum performance</a> ครับ โดยเท่าที่ลองดู Config แล้วมันเหมาะสำหรับเว็บทั่วไป , Blog , Webboard อะไรทำนองนี้ซึ่งข้อมูลแต่ละ Row ไม่ได้มีขนาดใหญ่มาก และไม่ได้ใช้ Fulltext แล้วเน้นไปที่มีคนเข้ามาใช้จำนวนมาก ซึ่ง Config ที่เขาให้มาถือว่าดีแล้ว แต่จะเหมาะกับเราหรือไม่ต้องตรวจสอบดูกันเองนะครับ</p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/programming-solution/tuning-mysql-case-study-obvoc-obhunter/" rel="bookmark" title="September 13, 2011">Tuning MySQL : Case Study OBVOC/OBHUNTER</a></li><li><a
href="http://www.dominixz.com/blog/geek-tips/increase-speed-mysql-fulltext-order-by-with-this-mindset/" rel="bookmark" title="May 5, 2011">วิธี Search MySQL ด้วย Fulltext Order By Query เร็วและแรง</a></li><li><a
href="http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development/" rel="bookmark" title="August 15, 2011">ประสบการณ์ 8 ข้อที่อยากให้เด็กรุ่นใหม่รู้กับการทำ Web Development</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/programming-solution/tuning-mysql-trace-yourself-and-understand-variable/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ประสบการณ์ 8 ข้อที่อยากให้เด็กรุ่นใหม่รู้กับการทำ Web Development</title><link>http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development/</link> <comments>http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development/#comments</comments> <pubDate>Mon, 15 Aug 2011 16:44:49 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[VPS]]></category> <category><![CDATA[วิธีแก้ปัญหาเขียนโปรแกรม]]></category> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1377</guid> <description><![CDATA[ถึงวันนี้ก็เป็นเวลาหลายปีแล้วที่ผมได้มาจับด้านเว็บเป็นอาชีพจริงๆนับย้อนไปตั้งแต่ปี 2 จนมาถึงตอนนี้ปี 2011 ก็เป็นเวลา 5 ปีแล้วที่ได้ทำอาชีพนี้ โดยต้องบอกก่อน ว่าผมไม่เคยได้จับระบบใหญ่ ไม่เคยเจองานที่ Hit Limit ของสถาปัตยกรรม จนกระทั่งมาทำงานๆหนึ่งที่เรียกว่า &#8220;บอทเว็บ&#8221; แน่นอน OBVOC ไม่ใช่งานบอทเว็บ ตัวแรกของผม แล้วแต่ละตัวก็ไม่เคยเจอ Limit จนกระทั่งเอามาใช้งานจริง ทำแบบ Commercial จริงๆ แล้วทำให้รู้ว่าจริงๆ สิ่งที่เราคิดว่าดีตอนแรกมันอาจไม่ดีถึงตอนหลังก็ได้ เลยอยากจะมาถ่ายทอดความรู้กับนักพัฒนาหรือใครก็ตามที่ กำลังจะทำเว็บขนาดใหญ่หรือมี Transaction สูงๆแล้วก็เป็นสาเหตุว่าทำไมผมถึงต้องพัฒนาก้าวไปอีกขั้นด้วยเทคโนโลยีที่พึงมาในปัจจุบัน โดยสาเหตุที่เจอมากับตัวก็คือ เงินทุนที่่มีอย่างจำกัดทำให้เรามี Server ขนาดเล็กกว่าที่ Application เราต้องการสมมุติว่าคุณมี RAM อยู่ 1GB แล้วเป็น Shared CPU แต่คุณต้องการทำ Fulltext , การวิเคราะห์และคำนวณเพื่อนำมาทำสถิติ ซึ่งใช้ CPU 100% เกือบตลอดเวลา ดังนั้นปัญหาแรกคือ &#8220;ทรัพยากร&#8221; อย่ามีน้อยเกินไปกับขนาดตัว App [...]]]></description> <content:encoded><![CDATA[<p>ถึงวันนี้ก็เป็นเวลาหลายปีแล้วที่ผมได้มาจับด้านเว็บเป็นอาชีพจริงๆนับย้อนไปตั้งแต่ปี 2 จนมาถึงตอนนี้ปี 2011 ก็เป็นเวลา 5 ปีแล้วที่ได้ทำอาชีพนี้ โดยต้องบอกก่อน ว่าผมไม่เคยได้จับระบบใหญ่ ไม่เคยเจองานที่ Hit Limit ของสถาปัตยกรรม จนกระทั่งมาทำงานๆหนึ่งที่เรียกว่า &#8220;บอทเว็บ&#8221; แน่นอน OBVOC ไม่ใช่งานบอทเว็บ ตัวแรกของผม แล้วแต่ละตัวก็ไม่เคยเจอ Limit จนกระทั่งเอามาใช้งานจริง ทำแบบ Commercial จริงๆ แล้วทำให้รู้ว่าจริงๆ สิ่งที่เราคิดว่าดีตอนแรกมันอาจไม่ดีถึงตอนหลังก็ได้ เลยอยากจะมาถ่ายทอดความรู้กับนักพัฒนาหรือใครก็ตามที่ กำลังจะทำเว็บขนาดใหญ่หรือมี Transaction สูงๆแล้วก็เป็นสาเหตุว่าทำไมผมถึงต้องพัฒนาก้าวไปอีกขั้นด้วยเทคโนโลยีที่พึงมาในปัจจุบัน โดยสาเหตุที่เจอมากับตัวก็คือ</p><ol><li>เงินทุนที่่มีอย่างจำกัดทำให้เรามี Server ขนาดเล็กกว่าที่ Application เราต้องการสมมุติว่าคุณมี RAM อยู่ 1GB แล้วเป็น Shared CPU แต่คุณต้องการทำ Fulltext , การวิเคราะห์และคำนวณเพื่อนำมาทำสถิติ ซึ่งใช้ CPU 100% เกือบตลอดเวลา ดังนั้นปัญหาแรกคือ <strong>&#8220;ทรัพยากร&#8221;</strong> อย่ามีน้อยเกินไปกับขนาดตัว App แต่อย่่างว่าใครจะไปรู้ต้องลองทำๆไปแล้วเดียวถึงจะรู้เอง</li><li>ทดลองกับข้อมูลจำนวนมากๆ ปกติแล้วเราทำเว็บไซต์จะทำกับข้อมูลจำนวนน้อยๆก่อน แล้วสิ่งที่คุณจะเจอปัญหาก็คือ เมื่อมันถึงจุดๆหนึ่งที่ RAM ไม่พอพักข้อมูลของคุณใน MySQL (Database) อื่นๆระบบคุณจะช้าขึ้นไม่ต่ำกว่า 5x-20x ทำให้จากเว็บดีๆของคุณช้าในทันที โดยผมบอกได้เลยว่าปัญหานี้ไม่จำเป็นต้องทำตั้งแต่เริ่ม แต่สิ่งที่ควรทำคือหาเลขนี้ให้ได้ <strong>&#8220;อัตราการโตของข้้อมูลจริงต่อวัน&#8221;</strong> ให้เก็บข้อมูลสัก 30 วันคุณจะรู้อยู่่สองเลขก็็คือ Database โตขึ้นต่อวันเท่าไร และค่าเฉลี่ยต่อ 30 วันเท่าไร แล้วให้คุณไปหาอีกเลขหนึ่งที่สำคัญก็คือ <strong>&#8220;ฐานข้อมูลโตจากวันแรกจนถึงวันที่  30 คิดเป็นกี่ %&#8221; </strong>แล้วลองทำนายดูว่าอีก 90 วันข้างหน้ามันจะมีข้อมูลเท่าไร ซึ่งแบบนี้คือวิธีคิดง่ายๆ เรื่องจริงมันไม่ง่ายที่จะเดาแบบนี้เพราะมีเรื่อง Marketing มาเกี่ยวข้องด้วย</li><li>พอเราหาอัตราการโตข้อมูลเจอแล้ว สิ่งที่คุณควรจะทำต่อไปก็คือ &#8220;ทดลองด้วยจำนวนข้อมูลที่ทำนายไว้อีก 90 วันหรือมากกว่านั้น&#8221; โดยถ้ามั่นใจแล้วว่า Feature ไม่เปลี่ยนแปลง ผมขอแนะนำว่าให้ทดสอบแบบ Stress Test หรือทำให้สุดไปเลยคือ Insert ข้อมูลเข้าไปเรื่อยๆแล้วลอง Test ระบบว่าระบบเราเริ่มช้า ให้จดเลขนั้นไว้ไม่ว่าจะเป็นจำนวน Record หรือ Database Size แล้วลองนำกลับมาคำนวณดูโดยใช้เลขเดิมที่เรามีโดยคราวนี้เราจะหาว่า <strong>&#8220;จะใช้ระยะเวลาเท่าไรถึงจะถึงข้อมูลจำนวนที่ทำให้ช้า&#8221; </strong>โดยวิธีก็คือ ให้เอา      จำนวนข้อมูลที่ทำให้ช้า / อัตราการโตข้อมูลจริงเฉลี่ยต่อวัน  โดยถ้าอยากให้แม่นกว่าเดิมให้เอาอัตราการเติบโต (%) ไปหารอีกทีก็จะได้ข้อมูลแบบหยาบๆมาพอดูได้ว่า <strong>อีกกี่วันถึงเวลาที่เราต้องเปลี่ยนแปลงวิธีคิดกับการเข้าถึงฐานข้อมูล</strong> ถ้ามันเป็นเวลานานเป็นปีแล้วละก็ชั่งมันไปก่อนไม่ต้องทำอะไร แต่ให้รับรู้ไว้้แล้วจดว่ามันจะช้าเมื่อไร</li><li>เว็บไซต์มีหลายด้านแต่ด้านไหนจะสำคัญกว่าใครขึ้นอยู่กับแต่ละ Application โดยตัวแปรสำคัญที่ผมคิดว่าสำคัญจริงๆ ก็คือ CPU , RAM , อัตราความเร็วนในการเขียนข้อมูล , อัตราความเร็วในการอ่านข้อมูล , Bandwidth ขาเข้า-ขาออก , Webserver request per sec , Network Latency (ผมใช้ Firebug ดู)</li><li>เรื่องการทำ Fulltext Search กับ Reverse Index เนื่องจากผมต้องมีการทำการค้นหาข้อมูล เหล่านี้จากบอทที่เก็บมาได้ก็ผมข้อเท็จจริงหลายอย่างว่า การทำ Reverse Index นั้น sure กว่าเยอะว่าจะค้้นหาเจอ แต่มีข้อเสียคือเราไม่รู้ว่าเขาจะหาด้วยคำอะไร จนกว่าจะมีการใส่ข้อมูลเข้ามา ซึ่งถ้าให้ระบบไปทำ Reverse Index ทันที ณ ตอนนั้นก็คงช้า ดังนั้นคุณต้อง Weight เอาดังนี้<ul><li>Like นั้นช้า แต่ข้อมูลที่อยากจะหานั้นตรงกับความต้องการมากกว่า เมื่อข้อมูลมีมากๆนั้นวิธีนี้จะช้าขั้นเทพก็ว่าได้</li><li>Fulltext Search โดยเท่าที่ผมใช้มา มันค่อนข้างได้ผลประมาณ 70-80% เลยทีเดียวสำหรับภาษาไทย (ผมใช้ MySQL MyISAM fulltext) แต่อย่างว่า ถ้าอีก 20% นั้นเป็นสิ่งที่ลูกค้าผมต้องการหา แต่ดันหาไม่เจอเขาจะพอใจรึเปล่า ? ดังนั้นวิธีนี้คือ Speed มาก่อน , Coverage 70-80% แล้วจะช้าเมื่อเริ่มมี Complex Search เช่น ค้นหาข้อมูลที่มีคำว่า &#8220;โดม&#8221; หรือ &#8220;วโรดม&#8221; หรือ &#8220;ทศนิยม&#8221; หรือ &#8220;อื่นๆ&#8221; และไม่มีคำว่า &#8220;ทดสอบ&#8221; แบบนี้เป็นต้น</li><li>Reverse Index ข้อเสียคือไม่สามารถทำให้ค้นหาทันทีได้หรือจะต้องทำ Index ด้วยตัวเองก่อนนั้นเอง วิธีนี้ก็ใช้ Server Side Script ช่วยอย่่าง PHP เอาข้อมูลที่มีมาวิเคราะห์ว่ามี &#8220;คำนี้&#8221; ไหมเสร็จแล้ว Save ความสัมพันธ์ระหว่างข้อความกับ Keyword ถ้ามีคนค้นหาด้วย Keyword นั้นพอดีคราวหลังก็จะดึงข้อมูลขึ้นมาได้แล้ว แต่ข้อเสียมีเยอะมากคือถ้าจะทำ Complex Search นั้นเราจะต้องทำตัว Translate จาก Search Query มาเป็น SQL Query ซึ่่งเสียเวลา</li><li>Fulltext ผสม Reverse Index วิธีนี้ได้ผลดีที่สุด โดยใช้วิธีการ Union Query กันผลที่ได้คือมีความถูกต้องสูง สามารถค้นหาได้ทันที แต่ก็ไปตายที่ Complex Search อยู่ดี</li></ul></li><li>ควรจะรู้จัก <a
href="http://en.wikipedia.org/wiki/CAP_theorem">CAP Theorem</a> ซึ่งเป็นหัวใจที่ต้องเลือกว่าจริงๆ แล้วระบบเราต้องการแบบไหน ซึ่งตรงส่วนนี้ถ้ามีประสบการณ์จะเข้าใจความสำคัญในการเลือก CAP โดยทำให้เราก้าวไปเป็น Web Developer อีกขั้นหนึ่งโดยจะเข้าใจคำว่า &#8220;one size doesn&#8217;t fit all&#8221;</li><li>อย่ามองข้าม Script Automation และ Alert สองเรื่องนี้ถือว่าเป็นสิ่งที่ทำให้ชีวิตของคนเขียน Program สบายและมีความสุขได้ ถ้าขาดส่วนนี้ไปงานจะเยอะขึ้นเรื่อยๆ จนเราปวดหัวเลยทีเดียว โดย Automation ให้ได้มากที่สุดเท่าที่เราทำได้ ทั้ง Log ข้อมูล , Backup ข้อมูล , Process ข้อมูล ฯลฯ เท่าที่คอมพิวเตอร์จะทำได้ ผมมั่นใจว่าถ้าการเขียนครั้งหนึ่งสามารถแก้ปัญหาหนึ่ง ที่คุณต้องใช้เวลา 10 นาที &#8211; 30 นาทีทำต่อครั้งนั้นถือว่าคุ้มค่ามากเพราะ มันคงไม่เกิดเพียงแค่ครั้งเดียวเป็นแน่แท้ ! แล้วคุณก็เอาไปใช้กับระบบอื่นได้อีกด้วย อีกอันที่สำคัญคือระบบ Alert คุณเบื่อไหมที่ต้องค่อย Monitor อะไรบ้างอย่างบ่อยๆทั้งๆที่เรื่องมันไม่ได้เกิดตลอดเวลา เช่น ระบบกำลังจะ Memory หมด , CPU หมด , มี Process บางตัวใช้ CPU เกิน 80% แล้ว Log ฯลฯ ซึ่งเรื่องราวนี้ขึ้นอยู่กับว่าคุณต้องการให้มันเป็น Automation หรือ Alert</li><li>Backup Backup Backup โดย Backup ที่ว่านี้คืออย่า Backup เฉพาะในเครื่องเดียวกัน ให้มีการกระจายข้อมูลไปที่อื่นด้วย หรือนำมาเก็บไว้ในเครื่องตัวเอง เพราะข้อมูลเป็นสิ่งสำคัญที่สุดของเว็บถ้ามันหายไป เว็บเราก็คงเหมือนเริ่มใหม่กันเลย ดังนั้นอย่าลืม Backup ไม่ว่าจะด้วยวิธีการไหน แต่ผมแนะนำ <a
href="http://en.wikipedia.org/wiki/Incremental_backup">Incremental Backup</a> แต่ถ้ามันทำได้ยาก ก็แนะนำว่า Backup ทั้งหมดไปเถอะดีกว่าหายครับ</li></ol><p>จบแล้ว 8 ข้อโดยจริงๆยังมีอีกมาก แต่เรื่องเหล่านี้เป็นเรื่องที่ผมเจอตอนทำ OBVOC เลยอยากจะนำมา Share ให้ฟังกันครับ <img
src='http://www.dominixz.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/programming-solution/tuning-mysql-trace-yourself-and-understand-variable/" rel="bookmark" title="September 11, 2011">Tuning MySQL : สำรวจตัวเองและเข้าใจตัวแปร</a></li><li><a
href="http://www.dominixz.com/blog/programming-solution/tuning-mysql-case-study-obvoc-obhunter/" rel="bookmark" title="September 13, 2011">Tuning MySQL : Case Study OBVOC/OBHUNTER</a></li><li><a
href="http://www.dominixz.com/blog/review/oracle-xe-10g-vs-mysql-v516/" rel="bookmark" title="February 11, 2008">Oracle XE 10g [vs] MySQL v5.1.6 สงครามของฟรี !</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/programming-solution/8-things-for-young-web-development/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>ปิด Clamd Dovecot ในบน Linux VPS แบบถาวรด้วย NTSYSV</title><link>http://www.dominixz.com/blog/software-tips/close-clamd-spamd-in-vps-with-ntsysv-linux-command/</link> <comments>http://www.dominixz.com/blog/software-tips/close-clamd-spamd-in-vps-with-ntsysv-linux-command/#comments</comments> <pubDate>Sat, 30 Jul 2011 19:08:29 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category> <category><![CDATA[linux]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1358</guid> <description><![CDATA[เนื่องจากผมใช้ VPS อยู่แล้วที่นี้ผมมี RAM จำกัดที่ 2GB แต่พอดีผมใช้มันเกือบเต็มแล้วละ ปกติจะ kill process ของ clamd (antivrius) , spamd กับ dovecot ทิ้งเพราะมันกิน Ram เยอะ แต่อยู่ดีมันก็จะกลับมาเฉยเลย เป็นสาเหตุทำให้ระบบผมรวนแล้ว Ram เต็มทำให้ระบบผม ทำงานต่อไม่ได้เลยดังนั้นผมเลยต้องหาวิธีปิดมันแบบถาวร ซึ่งเพื่อนผมก็ประสบปัญหานี้เหมือนกันเลยบอกว่าใช้ NTSYSV แล้วก็เลือกโปรแกรมที่ต้องการปิดโดยผมมีรูปตัวอย่างให้ดูด้านล่างนี้เลยครับ (กดที่รูปเพื่อดูรูปใหญ่นะครับ) โดยวิธีควบคุมก็ใช้ เครื่องหมายขึ้น , เครื่องหมายลง ถ้าจะปิดอันไหนใช้ Spacebar ครับส่วนไปที่ OK หรือ Cancel ให้กด Tab ครับ เพียงเท่านี้ ก็ได้ Ram คืนมาแบบไม่ต้องกลัวว่าอยู่ๆมันจะกลับมา แล้วทำให้ Mem คุณหมดไปแล้วครับ Similar Posts:Monit สิ่งที่คนทำ Server ควรรู้ เรื่องเล่า [...]]]></description> <content:encoded><![CDATA[<p>เนื่องจากผมใช้ VPS อยู่แล้วที่นี้ผมมี RAM จำกัดที่ 2GB แต่พอดีผมใช้มันเกือบเต็มแล้วละ ปกติจะ kill process ของ clamd (antivrius) , spamd กับ dovecot ทิ้งเพราะมันกิน Ram เยอะ แต่อยู่ดีมันก็จะกลับมาเฉยเลย เป็นสาเหตุทำให้ระบบผมรวนแล้ว Ram เต็มทำให้ระบบผม ทำงานต่อไม่ได้เลยดังนั้นผมเลยต้องหาวิธีปิดมันแบบถาวร ซึ่งเพื่อนผมก็ประสบปัญหานี้เหมือนกันเลยบอกว่าใช้</p><h1>NTSYSV</h1><p>แล้วก็เลือกโปรแกรมที่ต้องการปิดโดยผมมีรูปตัวอย่างให้ดูด้านล่างนี้เลยครับ (กดที่รูปเพื่อดูรูปใหญ่นะครับ)</p><p
style="text-align: left;"><a
href="http://www.dominixz.com/blog/wp-content/uploads/2011/07/Screen-Shot-2554-07-31-at-2.04.43-AM.png" target="_blank"><img
class="aligncenter size-medium wp-image-1359" title="Screen Shot 2554-07-31 at 2.04.43 AM" src="http://www.dominixz.com/blog/wp-content/uploads/2011/07/Screen-Shot-2554-07-31-at-2.04.43-AM-300x190.png" alt="" width="300" height="190" /></a>โดยวิธีควบคุมก็ใช้ เครื่องหมายขึ้น , เครื่องหมายลง ถ้าจะปิดอันไหนใช้ Spacebar ครับส่วนไปที่ OK หรือ Cancel ให้กด Tab ครับ เพียงเท่านี้ ก็ได้ Ram คืนมาแบบไม่ต้องกลัวว่าอยู่ๆมันจะกลับมา แล้วทำให้ Mem คุณหมดไปแล้วครับ</p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/geek-tips/centos-monit-how-to-durable-your-process/" rel="bookmark" title="January 2, 2012">Monit สิ่งที่คนทำ Server ควรรู้</a></li><li><a
href="http://www.dominixz.com/blog/life-talk/%e0%b9%80%e0%b8%a3%e0%b8%b7%e0%b9%88%e0%b8%ad%e0%b8%87%e0%b9%80%e0%b8%a5%e0%b9%88%e0%b8%b2-twitter-19012012-25012012/" rel="bookmark" title="January 25, 2012">เรื่องเล่า Twitter 19/01/2012 &#8211; 25/01/2012</a></li><li><a
href="http://www.dominixz.com/blog/productivity/new-world-versus-old-world-episode1/" rel="bookmark" title="June 15, 2007">โลกสมัยเก่า vs. โลกสมัยใหม่ ตอนที่ 1</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/software-tips/close-clamd-spamd-in-vps-with-ntsysv-linux-command/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>[Mac] แปลงชื่อเพลงไทยใน iTunes ให้กลับมาอ่านได้อีกครั้ง</title><link>http://www.dominixz.com/blog/software-tips/mac-itunes-thai-tag-id3-to-unicode-snow-leopard/</link> <comments>http://www.dominixz.com/blog/software-tips/mac-itunes-thai-tag-id3-to-unicode-snow-leopard/#comments</comments> <pubDate>Sun, 10 Jul 2011 06:42:33 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1333</guid> <description><![CDATA[เนื่องจากผมเป็นคนหนึ่งที่มีเพลงภาษาไทย อยู่ในเครื่องแล้วเวลาลากเข้าไปใน itunes นั้นก็กลายเป็นภาษาต่างดาว อ่านไม่ออกกันเลยทีเดียว ทีนี้ผมเคยหา script เมื่อนานมาแล้ว ผมจำไม่ได้ว่าเจอที่ไหน ถ้าใครรู้รบกวนบอกด้วยครับผมจะได้ใส่ credit ไว้ให้ซึ่งผมขออนุญาติ post script นี้นะครับ โดยมันใช้ได้กับ Snow Leopard ด้วยนะครับ Script นี้ ดาวโหลดได้จากที่นี้เลยครับ โดยวิธีใช้ดังนี้ครับ (สำหรับ Mac เท่านั้นนะครับ ปล. ผมลองกับ iTunes 10.5.x กับ 10.6.x) เอาไฟล์ Mp3 ลงไปใน iTunes เลยครับ เลือก hilight ไฟล์เพลงที่ต้องการ convert ทั้งหมด โดยใช้ Shift ช่วยครับ เปิดไฟล์ที่ดาวโหลดไปครับ คราวนี้มันจะเปิด script โปรแกรม apple script editor ขึ้นมาครับ กด Run [...]]]></description> <content:encoded><![CDATA[<p>เนื่องจากผมเป็นคนหนึ่งที่มีเพลงภาษาไทย อยู่ในเครื่องแล้วเวลาลากเข้าไปใน itunes นั้นก็กลายเป็นภาษาต่างดาว อ่านไม่ออกกันเลยทีเดียว ทีนี้ผมเคยหา script เมื่อนานมาแล้ว ผมจำไม่ได้ว่าเจอที่ไหน ถ้าใครรู้รบกวนบอกด้วยครับผมจะได้ใส่ credit ไว้ให้ซึ่งผมขออนุญาติ post script นี้นะครับ โดยมันใช้ได้กับ <strong>Snow Leopard</strong> ด้วยนะครับ Script นี้ <a
title="iTunes Thai Tag ID3 to Unicode" href="http://dominixz.com/blog/files/itunes_thai_to_unicode.scpt" target="_blank">ดาวโหลดได้จากที่นี้เลยครับ</a> โดยวิธีใช้ดังนี้ครับ (สำหรับ Mac เท่านั้นนะครับ ปล. ผมลองกับ iTunes 10.5.x กับ 10.6.x)</p><ol><li>เอาไฟล์ Mp3 ลงไปใน iTunes เลยครับ</li><li>เลือก hilight ไฟล์เพลงที่ต้องการ convert ทั้งหมด โดยใช้ Shift ช่วยครับ</li><li>เปิดไฟล์ที่ดาวโหลดไปครับ คราวนี้มันจะเปิด script โปรแกรม apple script editor ขึ้นมาครับ</li><li>กด Run ใน apple script editor เสร็จปุ๊บมันจะขึ้นว่าต้องการ convert ทั้งหมด x ไฟล์ใช่หรือไม่ก็กดใช่ครับ</li><li>เสร็จแล้วมันจะทำการ run ไปเรื่อย โดยขอแนะนำคือใน 10.6.x รุ่น beta ที่ผมลองดูอยู่นั้นมีปัญหาคือ<ul><li>บางทีจะกด convert ไม่ได้ให้ออก itunes แล้วเข้าใหม่</li><li>บางที convert ไปกลางคันแล้วขึ้น error เฉยให้ออกแล้วเข้า itunes ใหม่ เสร็จแล้วให้ลอง convert ทีละ 30-80 ไฟล์แทน</li></ul></li></ol><p>สรุปแล้วคือใช้ได้ถึงแม้จะมี Bug บ้างแต่ก็ทำให้แก้ปัญหาของผมได้ ขอขอบคุณคนทำ Script นี้อีกครั้งนะครับ</p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/software-tips/how-to-ipad-wi-fi-sync-on-ios5-and-itunes-10-5-on-mac/" rel="bookmark" title="June 11, 2011">วิธีทำ iPad Wi-fi Sync Apps กับ Books บน iOS5 กับ iTunes 10.5 บน Mac</a></li><li><a
href="http://www.dominixz.com/blog/mac-experience/test-mac-osx-snow-leopard/" rel="bookmark" title="September 9, 2009">ลองใช้ Mac OSX Snow Leopard เสือดาวหิมะ</a></li><li><a
href="http://www.dominixz.com/blog/geek-tips/fast-upload-pictures-to-facebook-with-xnview/" rel="bookmark" title="August 21, 2010">ย่อรูปลง Facebook ฉบับคนธรรมดาด้วย XnView</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/software-tips/mac-itunes-thai-tag-id3-to-unicode-snow-leopard/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>วิธีเรียก Group Tab ก่อนของ Firefox 4 กลับมาเมื่อปิด</title><link>http://www.dominixz.com/blog/productivity/restore-group-tab-firefox-4-when-start-again/</link> <comments>http://www.dominixz.com/blog/productivity/restore-group-tab-firefox-4-when-start-again/#comments</comments> <pubDate>Mon, 27 Jun 2011 17:49:22 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category> <category><![CDATA[เพิ่มศักยภาพ]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1328</guid> <description><![CDATA[เนื่องจากผมคนหนึ่งที่ใช้ Group Tab แต่อย่างว่ามันมีปัญหาคือเมื่อปิดทีไร พอเปิดกลับมา Tab เหล่านั้นก็หายไปหมดเลยต้องไปกด History &#62; Restore Previous Session ทุกทีเลย แล้ววันหนึ่งก็เลย Search Google อย่างจริงจังว่ามันทำยังไงฟระ !! ที่ให้เปิด firefox ให้เอา group tab ที่เปิดไว้ก่อนปิดกลับมาด้วย สรุปแล้วก็ไปเจอบทความนี้ครับ http://neetgadget.com/quick-tips/how-to-restore-your-previous-sessions-automatically-on-firefox-4/ สรุปสั้นๆก็คือ ถ้าเป็น Mac ไปที่ Firefox &#62; Preferences &#62; General , ถ้าเป็น Windows เป็น Options &#62; General ตรง When Firefox Start ให้เปลี่ยนเป็น &#8220;Show my windows and tabs from last time&#8221; [...]]]></description> <content:encoded><![CDATA[<p>เนื่องจากผมคนหนึ่งที่ใช้ Group Tab แต่อย่างว่ามันมีปัญหาคือเมื่อปิดทีไร พอเปิดกลับมา Tab เหล่านั้นก็หายไปหมดเลยต้องไปกด History &gt; Restore Previous Session ทุกทีเลย แล้ววันหนึ่งก็เลย Search Google อย่างจริงจังว่ามันทำยังไงฟระ !! ที่ให้เปิด firefox ให้เอา group tab ที่เปิดไว้ก่อนปิดกลับมาด้วย สรุปแล้วก็ไปเจอบทความนี้ครับ</p><p><a
href="http://neetgadget.com/quick-tips/how-to-restore-your-previous-sessions-automatically-on-firefox-4/">http://neetgadget.com/quick-tips/how-to-restore-your-previous-sessions-automatically-on-firefox-4/</a></p><p>สรุปสั้นๆก็คือ</p><ol><li>ถ้าเป็น Mac ไปที่ Firefox &gt; Preferences &gt; General , ถ้าเป็น Windows เป็น Options &gt; General</li><li>ตรง When Firefox Start ให้เปลี่ยนเป็น &#8220;Show my windows and tabs from last time&#8221;</li><li>กด OK เป็นอันเสร็จครับ</li></ol><p>แค่นี้เวลาเราเปิด firefox ทีไรมันจะเปิด session เก่ากลับมาซึ่งทำให้ group tab เรายังอยู่ด้วยครับ <img
src='http://www.dominixz.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/mac-experience/test-mac-osx-snow-leopard/" rel="bookmark" title="September 9, 2009">ลองใช้ Mac OSX Snow Leopard เสือดาวหิมะ</a></li><li><a
href="http://www.dominixz.com/blog/geek-tips/%e0%b8%81%e0%b8%b3%e0%b8%88%e0%b8%b1%e0%b8%94-zitaexe-%e0%b9%81%e0%b8%9a%e0%b8%9a%e0%b8%a5%e0%b8%b9%e0%b8%81%e0%b8%97%e0%b8%b8%e0%b9%88%e0%b8%87/" rel="bookmark" title="February 11, 2009">กำจัด Zita.exe แบบลูกทุ่ง</a></li><li><a
href="http://www.dominixz.com/blog/productivity/firefox-3-add-on-tabs-open-relative/" rel="bookmark" title="August 28, 2008">Firefox 3 Add-on : Tabs Open Relative</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/productivity/restore-group-tab-firefox-4-when-start-again/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Facebook API สำหรับดู Share Count ของ Link</title><link>http://www.dominixz.com/blog/programming-solution/how-to-get-share-count-link-on-facebook/</link> <comments>http://www.dominixz.com/blog/programming-solution/how-to-get-share-count-link-on-facebook/#comments</comments> <pubDate>Fri, 24 Jun 2011 18:45:17 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[วิธีแก้ปัญหาเขียนโปรแกรม]]></category> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1326</guid> <description><![CDATA[เนื่องจากบางท่านอาจจะได้นำไปใช้ประโยชน์ เช่น นำ cron ไปเก็บแล้วก็ เอามาจัดอันดับภายใน blog ของตัวเองอะไรก็ว่าไปโดยใช้แบบนี้ได้เลยครับ https://graph.facebook.com/?ids=http://www.dominixz.com/blog/review/software/10-iphone-4-apps-that-i-use-episode-1 ลองเอาไปแปะบน Browser ดูครับมันจะ Return มาเป็น Json หน้าที่ของเราคือ ถ้าใน PHP ก็คือ $var = json_decode(file_get_contents(url)); เพียงเท่านี้จะได้ตัวแปรที่มี object share count มาใช้งานแล้วครับผม Similar Posts:มารู้จัก Facebook Graph API กัน PHP เรียกใช้ Web Service ของ .NET ด้วยการส่งและรับ Object Blog ชิลๆ Style วันเสาร์อาทิตย์ : Make it for me]]></description> <content:encoded><![CDATA[<p>เนื่องจากบางท่านอาจจะได้นำไปใช้ประโยชน์ เช่น นำ cron ไปเก็บแล้วก็ เอามาจัดอันดับภายใน blog ของตัวเองอะไรก็ว่าไปโดยใช้แบบนี้ได้เลยครับ</p><p><a
href="https://graph.facebook.com/?ids=http://www.dominixz.com/blog/review/software/10-iphone-4-apps-that-i-use-episode-1">https://graph.facebook.com/?ids=http://www.dominixz.com/blog/review/software/10-iphone-4-apps-that-i-use-episode-1</a></p><p>ลองเอาไปแปะบน Browser ดูครับมันจะ Return มาเป็น Json หน้าที่ของเราคือ ถ้าใน PHP ก็คือ $var = json_decode(file_get_contents(url)); เพียงเท่านี้จะได้ตัวแปรที่มี object share count มาใช้งานแล้วครับผม</p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/tech-news/nice-to-know-facebook-graph-api/" rel="bookmark" title="May 8, 2010">มารู้จัก Facebook Graph API กัน</a></li><li><a
href="http://www.dominixz.com/blog/programming-solution/php-call-dot-net-webservice-that-require-object-param/" rel="bookmark" title="September 12, 2008">PHP เรียกใช้ Web Service ของ .NET ด้วยการส่งและรับ Object</a></li><li><a
href="http://www.dominixz.com/blog/productivity/blog-chill-style-only-for-me/" rel="bookmark" title="July 7, 2007">Blog ชิลๆ Style วันเสาร์อาทิตย์ : Make it for me</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/programming-solution/how-to-get-share-count-link-on-facebook/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>แก้ไข้จุดบกพร่อง Facebook Open Graph Protocol (Social Plugins) ด้วย Facebook URL Linter</title><link>http://www.dominixz.com/blog/software-tips/debug-facebook-open-graph-protocol-with-facebook-url-linter/</link> <comments>http://www.dominixz.com/blog/software-tips/debug-facebook-open-graph-protocol-with-facebook-url-linter/#comments</comments> <pubDate>Thu, 23 Jun 2011 18:38:31 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1322</guid> <description><![CDATA[หัวข้ออาจจะยาวสักหน่อยแต่เนื้อหานิดเดียว ตั้งใจเขียนยาวๆเพื่อติด SEO เลยละ เพราะ Developer ที่ทำเกี่ยวกับ Facebook ซึ่งต้องมีการนำ Facebook บางส่วนเช่น Comments มาใส่ในเว็บ ซึ่งอาจจะเจอ Error ประหลาดอย่างเช่น กด Like บน Facebook Comments แล้วมีขึ้น Error โดยวิธีการตรวจสอบว่าเราจะต้องแก้ไขยังไงบน Page ของเราร่วมถึงเวลามีคน Share ขึ้น Facebook จะเป็นอย่างไรนะวิธีก็ง่ายๆครับไปที่ http://developers.facebook.com/tools/lint/ ซึ่งเป็น Tools ตรวจสอบหน้า Page ของเราว่าได้ทำงานถูกต้องกับ Facebook  รึยังโดยง่ายๆเพียงใส่ URL เดียวมันก็จะบอกผลมาว่าต้องแก้อย่างไรบ้าง หรือ OK แล้วครับ Similar Posts:โปรโมตและทำ Marketing Online ง่ายๆสำหรับ SME ตอนที่ 1 Sodia เครื่องมือโพสข้อความอัตโนมัติบน Facebook Page [...]]]></description> <content:encoded><![CDATA[<p>หัวข้ออาจจะยาวสักหน่อยแต่เนื้อหานิดเดียว ตั้งใจเขียนยาวๆเพื่อติด SEO เลยละ เพราะ Developer ที่ทำเกี่ยวกับ Facebook ซึ่งต้องมีการนำ Facebook บางส่วนเช่น Comments มาใส่ในเว็บ ซึ่งอาจจะเจอ Error ประหลาดอย่างเช่น กด Like บน Facebook Comments แล้วมีขึ้น Error โดยวิธีการตรวจสอบว่าเราจะต้องแก้ไขยังไงบน Page ของเราร่วมถึงเวลามีคน Share ขึ้น Facebook จะเป็นอย่างไรนะวิธีก็ง่ายๆครับไปที่</p><p><a
href="http://developers.facebook.com/tools/lint/">http://developers.facebook.com/tools/lint/</a></p><p>ซึ่งเป็น Tools ตรวจสอบหน้า Page ของเราว่าได้ทำงานถูกต้องกับ Facebook  รึยังโดยง่ายๆเพียงใส่ URL เดียวมันก็จะบอกผลมาว่าต้องแก้อย่างไรบ้าง หรือ OK แล้วครับ <img
src='http://www.dominixz.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/sme/easy-promote-and-marketing-online-sme-episode-1/" rel="bookmark" title="July 14, 2011">โปรโมตและทำ Marketing Online ง่ายๆสำหรับ SME ตอนที่ 1</a></li><li><a
href="http://www.dominixz.com/blog/tech-news/sodia-facebook-schedule-post-for-page/" rel="bookmark" title="April 20, 2011">Sodia เครื่องมือโพสข้อความอัตโนมัติบน Facebook Page</a></li><li><a
href="http://www.dominixz.com/blog/business/creative-business-episode-1/" rel="bookmark" title="June 12, 2011">Sodia &#8211; Creative Business Case Study</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/software-tips/debug-facebook-open-graph-protocol-with-facebook-url-linter/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>สัญญาณ Edge กากบาทบน Android 2.2</title><link>http://www.dominixz.com/blog/software-tips/how-to-fix-edge-cannot-send-data-in-android-2/</link> <comments>http://www.dominixz.com/blog/software-tips/how-to-fix-edge-cannot-send-data-in-android-2/#comments</comments> <pubDate>Tue, 21 Jun 2011 07:00:59 +0000</pubDate> <dc:creator>DominixZ</dc:creator> <category><![CDATA[เคล็คลับซอฟต์แวร์]]></category><guid
isPermaLink="false">http://www.dominixz.com/blog/?p=1318</guid> <description><![CDATA[เอามาเขียนเป็นบทความสำหรับใครที่ไม่รู้หรือคนที่ลืมไปแล้วว่าทำไมมันถึงขึ้นแบบนี้ได้ นั้นก็เพราะ &#8220;เราปิดไม่ให้ Android ใช้ Mobile Network Data&#8221;  สำหรับวิธีแก้บน Android 2.2 นั้นก็คือกด Home เพื่อเข้าหน้าแรกก่อนแล้ว กด Menu &#62; Settings &#62; Wireless &#38; Networks &#62; Mobile networks แล้วกดติกถูกที่ &#8220;Data Enabled&#8221; เป็นอันเสร็จพิธีครับผม Similar Posts:Network Onebitmatter โดยอ.ศุภเดช (@ripmilla) Android Wellcom A88 &#8211; ตรวจสอบก่อนซื้อ การใช้ jQuery Ajax put กับ delete ใน Ruby on Rails]]></description> <content:encoded><![CDATA[<p>เอามาเขียนเป็นบทความสำหรับใครที่ไม่รู้หรือคนที่ลืมไปแล้วว่าทำไมมันถึงขึ้นแบบนี้ได้ นั้นก็เพราะ &#8220;เราปิดไม่ให้ Android ใช้ Mobile Network Data&#8221;  สำหรับวิธีแก้บน Android 2.2 นั้นก็คือกด Home เพื่อเข้าหน้าแรกก่อนแล้ว</p><p>กด Menu &gt; Settings &gt; Wireless &amp; Networks &gt; Mobile networks แล้วกดติกถูกที่ &#8220;Data Enabled&#8221;</p><p>เป็นอันเสร็จพิธีครับผม <img
src='http://www.dominixz.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p> Similar Posts:<ul><li><a
href="http://www.dominixz.com/blog/tech-news/network-onebitmatter-by-ripmilla/" rel="bookmark" title="February 2, 2011">Network Onebitmatter โดยอ.ศุภเดช (@ripmilla)</a></li><li><a
href="http://www.dominixz.com/blog/review/hardware/review-how-to-buy-wellcom-a88/" rel="bookmark" title="April 27, 2010">Android Wellcom A88 &#8211; ตรวจสอบก่อนซื้อ</a></li><li><a
href="http://www.dominixz.com/blog/ruby-and-rails/jquery-ruby-on-rails-setup-put-delete-method/" rel="bookmark" title="September 18, 2008">การใช้ jQuery Ajax put กับ delete ใน Ruby on Rails</a></li></ul>]]></content:encoded> <wfw:commentRss>http://www.dominixz.com/blog/software-tips/how-to-fix-edge-cannot-send-data-in-android-2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic (User agent is rejected)
Database Caching using disk: basic

Served from: www.dominixz.com @ 2012-02-11 19:03:20 -->
