Wednesday, March 4, 2015

ใช้ pool mysql แล้วหน้าจอค้าง

หลังจากที่พอจะรู้เรื่อง Node.js, Express และ Jade บ้างแล้ว ก็เริ่มลงมือทำอะไรเล่นๆ เพื่อฝึกซ้อมฝีมือ ยิ่งใช้ไปยิ่งหลงรัก jade พอสมควร เพราะช่วยลดขยะ html ลงได้เยอะมาก ดูเรียบร้อยเป็นสัตว์ส่วนแก้ไขก็ง่าย แต่ยังไม่ได้ลอง คือ ใช้งาน jQuery ร่วมกับ jade คงต้องผ่านขั้นตอนของ ลองใช้งานฐานข้อมูลไปก่อน

การติดต่อผ่าน MySQL ทำได้หลายวิธี แต่สำหรับการติดต่อแบบ Multi Used เป็นการติดต่อฐานข้อมูลเพียงครั้งเดียวแล้วสามารถเรียกใช้งานได้หลายครั้งไม่ต้องติดต่อฐานข้อมูลบ่อยๆ

ตัวอย่าง

  var mysql =  require('mysql');                  
  var pool =  mysql.createPool({
 host : “hostName”,
 user : “username”,
 password: “password”
  }); 


การเรียกใช้งาน:

pool.getConnection(function(err, connection){
  connection.query( “select * from table1”,  function(err, rows){
   if(err) {
    throw err;
   }else{
    console.log( rows );
   }
  });
  
  connection.release();
});


ปัญหา:
เมื่อใช้ไปสักพักแล้วเกิดอาการหน้าจอค้าง เหมือนกำลังทำงานอยู่ เมื่อตรวจสอบไปที่ MySQL แล้วพบว่ามี process ค้างอยู่เป็นจำนวนมาก ตามที่ส่งเขาไป

แก้ไขปัญหา:
ปัญหาข้างต้นยังแก้ไม่ได้ แต่ลองเปลี่ยนวิธีการใช้งาน pool ผ่าน mysql-pool

ติดตั้ง:

npm install mysql-pool
npm install mysql@0.9.6 (แก้ไข Error ในเวอร์ชันใหม่)

เรียกใช้งาน:

var MySQLPool = require("mysql-pool").MySQLPool;
var pool = new MySQLPool({
  poolSize: 4,
  user:     'root',
  password: 'root',
  database: 'test'
});


pool.query("SELECT 'Hello, World!' AS hello", function(err, rows, fields) {
  if(err) throw err;
  console.log(rows[0].hello);
});

ตอนนี้ลองใช้งานดูแล้วยังไม่พบปัญหาของหน้าจอค้าง แต่ยังไม่มีเวลาลงลึกว่าเป็นเพราะเหตุใด โดยแบบหลังจะกำหนด poolSize = 4 ซึ่งอาจจะมีส่วนเกี่ยวข้อง เพราะแบบแรกก็มีออฟชันกำหนดตัวหนึ่งคือ

var connection =  mysql.createConnection( { multipleStatements: true } );
อีกสักพักจะได้ลองกลับมาทดสอบอีกครั้งหนึ่ง ตอนนี้ขอเดินหน้าไปก่อนครับ...

ข้อมูล:
https://github.com/Kijewski/node-mysql-pool
http://stackoverflow.com/questions/14070188/getting-error-while-running-node-mysql-tutorial
http://www.thegeekstuff.com/2014/01/mysql-nodejs-intro/


1 comment: