SQL Performance Tuning
การเขียน SQL แต่ละแบบที่ให้ผลลัพธ์เหมือนกัน แต่ performance อาจจะไม่เท่ากัน ศึกษาได้จากเล่มนี้ครับ
Log4j Guide
ปกติเวลาเขียน java ถ้าอยากดูค่าตัวแปรก็มักจะใช้ System.out.println ให้แสดงผลออกมาทาง console
ตอนที่ Develop ก็ง่ายดีอ่ะนะ แต่พอเอาไปใช้งานจริงกับ App Server ก็ไม่ได้ช่วยอะไรดูผลอะไรก็ยาก
บางคนก็เขียน class เก็บ log file เอาเองแบบเขียนลง file ได้เป็นพอ ก็ช่วยได้บ้าง
แต่จริงๆแล้วควรมีการเก็บ log การทำงานของโปรแกรมให้เป็นระบบหน่อย ลองดูๆก็มาเจอLog4j ของ Apache ที่ดูเข้าท่าดี
Log4j เป็น class library ที่ไว้จัดการกับ Log โดยปกติแล้วจะมี Console, File, Database และ E-Mail แต่ก็สามารถเขียนเพิ่มเติมเองได้
Level ของ Log จะแบ่งเป็น 5 Level ตามนี้(จากต่ำไปสูง)
- Debug
- Info
- Warn
- Error
- Fatal
โดย Level ที่สูงกว่าจะเขียน Log ของ Level ต่ำกว่าติดมาด้วย
ใน code ของเราก็จะมีการเขียน logging โดยไม่ต้องสนใจว่าจะ log level ไหน ให้เขียนตามสะดวก แล้วค่อย set properties file ให้เก็บ log ที่ level ไหน
วิธีใช้งาน Log4j ก่อนก็ต้องไป download log4j มาจาก Apache log4j ก่อน แล้ว add log4j.jar เข้ามาใน project
ตัวอย่าง code
import org.apache.log4j.Logger;
public class LogClass {private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
public void getI(){};
public static void main(String[] args) {log.debug(“Debug”);
log.info(“Info”);
log.warn(“Warn”);
log.error(“Error”);
log.fatal(“Fatal”);
try{LogClass clz=null;
clz.getI();}
catch(Exception ex){log.error(“Error Performing Operation”,ex);}}
}
ต่อไปต้องมีการสร้าง file configure ซึ่งจะเป็นในแบบ Properties หรือเป็น XML ก็ได้ แล้วแต่ความถนัด เพื่อจะกำหนดค่าต่างๆของการ write log โดยถ้าไม่ได้สั่ง load file configure ก็จะใช้ file ชื่อ log4j.properties ดังตัวอย่าง
### file appender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=’.'yyyy-MM-dd
log4j.appender.file.File=/test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%nlog4j.rootLogger=Debug, file, stdout
จะเป็นการเก็บ log ใน File ชื่อ test.log และแสดงผลออกมาทาง console โดยมี Pattern แบบนี้
23:43:21,968 DEBUG LogClass:29 – Debug
23:43:21,968 INFO LogClass:29 – Info
23:43:21,968 WARN LogClass:29 – Warn
23:43:21,968 ERROR LogClass:29 – Error
23:43:21,968 FATAL LogClass:29 – Fatal
Pattern การแสดงสามารถตั้งค่าได้ที่ layoutใConversionPatternโดยมีค่าตามนี้
#%c Logger, %c{2 } last 2 partial names
#%C Class name (full agony), %C{2 } last 2 partial names
#%d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat
#%F File name
#%l Location (caution: compiler-option-dependently)
#%L Line number
#%m user-defined message
#%M Method name
#%p Level
#%r Milliseconds since program start
#%t Threadname
#%x, %X see Doku
#%% individual percentage sign
#Caution: %C, %F, %l, %L, %M slow down program run!
เราสามารถ Load file configure ได้ตามนี้
PropertyConfigurator.configure(“c:\\data\\config\\log4j.properties”);
เขียน ex.printStackTrace(); ลง log
log.error(“Error Performing Operation”,ex);
WebSphere Class Load Policy
WebSphere เครื่องที่ไว้ใช้ UAT เกิดปัญหา ClassNotFoundException ทั้งๆก็เห็นอยู่ว่ามี Class นั้นอยู่ใน Application ที่ Deploy ลงไป
ก็หากันอยู่ครึ่งค่อนวัน ลองโน่นลองนี่ จนสุดท้ายน้องมันไปเจอ Property อยู่ตัวหนึ่งในไม่เหมือนกับเครื่อง Develop ชื่อ Class Load Policy ในหน้า Server Configure พอเห็นค่าที่ต้อง Set ก็คิดว่าน่าจะเกี่ยว เพราะค่าที่มีให้เลือกคือ Single กับ Multiple โดยที่เครื่อง UAT set เอาไว้เป็น Single
ปกติ Application ที่ Deploy ก็ไม่ได้ยุ่งเกี่ยวกัน มีการใช้ class ซ้ำๆกัน แต่ก็แยกกันไปคนละที่ ซึ่งถ้า set Class Load Policy ไว้เป็น Single ก็น่าจะทำให้ WebSphere เกิดอาการร่วนขึ้น เพราะ Class ใช้เหมือนๆ (package ยังที่เดียวกันซะอีก)
สรุปพอ set ค่าเป็น Multiple แล้ว อาการร่วนต่างๆก็หายไป
WebSphere share library
First step is create directory of shared libraries on WebSphere’s Server
- Export library class to Jar file
- Ftp library file to server
The next step is create Shared Libraries in WebSphere
- From Environment menu, choose Share Library
- WebSphere will Shared Libraries Screen, then click New
- Input Name, Description and Class Path of jar file and click OK
- Save configure to server
The next step is set Shared Library to Application
- Form Application Menu, choose Enterprise Applications
- Select Application for assign Share Library
- In Application Configuration at Additional Properties topic, click Libraries
- WebSphere will show Library Reference, then click Add
- Select Library and click OK
- Save configure to server and Restart Application
- Application will include share library, finish
Execute Dynamic SQL in DB2 Store Procedure
วิธีการสร้าง SQL Statement ใน Store Procedure ของ DB2 และ Return Cursor ออกมา สามารถทำได้ตามนี้
CREATE PROCEDURE SP_COUNT_ROW( IN pTblName VARCHAR(50) )
RESULT SET 1
LANGUAGE SQL
BEGINDECLARE vTmp VARCHAR(200);
DECLARE vStmt statement;DECLARE c1 CURSOR WITH RETURN FOR vStmt;
SET vTmp = ‘SELECT count(*) as RowCount,’||pTableName||’ as TblName ‘||FROM ‘|| pTblName ;
prepare vStmt from vTmp;OPEN c1;
END
จากตัวอย่างเป็นการส่งชื่อ Table มาทำการ Count หา Row ที่มีอยู่ ผลลัพธ์ได้จะมีเป็น
call SP_COUNT_ROW(‘CUSTOMERS’)
RowCount TableName
———– ———————
332,456 CUSTOMERS
ที่น่าแปลกใจก็คือมี Type variable “Statement” ด้วยเรอะ
VB.Net Power Coding
วันนี้เอาหนังสือมาฝากครับ
ตอนนี้ Project ใช้ VB.Net อยู่เลยหาหนังสือมาดูเพิ่มเติม จากมีตอนเคยเขียน VB6เมื่อนานมาแล้ว
เล่มนี้ไม่ได้สอนเขียน VB.Net แต่เป็น ส่วนเน้นๆ ของการทำงาน หลายๆเรื่องก็ไม่รู้ว่าเขียนกันยังนี้ไ้ด้ด้วย
What’s new in Visual Studio 2008
ใช้งาน Visual Studio มาตั้งแต่เรียน ก็นับสิบปีแล้ว ทุกวันนี้ก็ยังไปเกี่ยวข้องกับ Visual Studio 6 อยู่
ว่าไปจริงๆตัว VS ตัวแรกที่มาำจับเป็นเรื่องเป็นราวหลังจากกลับมาทำงาน Programming อีกก็เป็นตัว 2005 แล้ว
ข้าม Visual Studio .Net, Visual Studio 2003 ไปสองตัว
ใช้ VS2005 กับ .Net 2.0 ได้ไม่ทันไร ก็มีตัวใหม่ออกมาอีกแล้ว ก็เลยจะมาดูกันว่าตัวVS2008 นี้มีอะไรใหม่ๆบ้าง
จริงๆไปอ่านดูใน What’s New in Visual Studio 2008 จะครบถ้วนกว่า ขอยกหัวข้อใหญ่ๆที่คิดว่ามีประโยชน์มาแล้วกัน
- IDE support project ทั้ง .Net 2.0, 3.0 และ 3.5 สร้าง project supportของแต่ละ framework ได้
- IntelliSense ที่ดูรวดเร็วขึ้น
- Create Windows Presentation Foundation (WPF) Project
- Ajax Web Project
- Report Application Project
- Language-Integrated Query (LINQ)
- Object Relational Designer เอาไว้สร้าง class ให้ map กับ table
ที่ต้องศึกษาใหม่ๆก็คงเป็น WPF แต่ก็ยังไม่รู้ว่าจะเอาไปใช้ในงานเมื่อไร ดูเหมือนเป็นของเล่นมากกว่า
ส่วน LINQ ตัวรูปแบบภาษาไม่เท่าไร แต่แนวคิดนี้เปลี่ยนวิธีการเขียนโปรแกรมกันไปเลย ต้องศึกษาดูให้มากๆก่อนจะเอาไปใช้ได้
วันสิ้นปี 2007
ณ ที่ไหนสักแห่งที่ไม่ใช่ประเทศบ้านเกิด
ปีนี้มาทำงานต่างประเทศ อยู่ทำงานกันข้ามปี ไม่มีความคิดไปเที่ยวไหน อยู่คนเดียวที่ห้อง
ก็เหมือนทุกๆปีที่จะตั้งเป้าหมายว่าปีหน้าจะทำอะไรบ้าง แม้ว่าจะไม่เคยทำได้ครบ แต่ก็จะขอตั้งเป้าหมายของปีหน้านี้คือ
- ฝึกฝนเรื่องการสื่อสารให้ดีขึ้นทั้งภาษาอังกฤษและภาษาไทย
- จะจัดแผนการทำงานในแต่ล่ะวัน
- ใช้เงินอย่างประหยัด ตั้งเป้าไว้ไม่เกินวันล่ะ 300 บาท
- ทำบัญชีการใช้จ่าย
- เลิกการเป็นหนี้สินเงินผ่อน
ต่อไปนี้ไม่ใช่เป้าหมาย แต่เป็นสิ่งที่อยากจะทำเพื่อให้รู้สึกว่า ชีวิตควรจะมีระเบียบแบบแผนมาขึ้น เพราะไหนๆก็หนีจากสังคมที่เป็นอยู่ไม่ได้ ตอนนี้ชีวิตก็ไม่ได้อยู่คนเดียว ความฝันเฟื่องเก่าๆ คิดแต่ไม่ได้พูด พูดแล้วทำไม่ได้ ทำแล้วไม่ได้ถึงที่สุด สิ่งต่างๆที่หลอกตัวเอง เพื่อให้รับสภาพความเป็นจริงได้ควรเลิก แล้วมองความจริงในสังคมซะที
- จะเล่นกอล์ฟเป็นจริงเป็นจัง ซึ่งจริงๆก็ชอบการได้ใช้สมาธิจดจ่ออยู่กับแต่ล่ะหลุม ส่วนที่ได้เพิ่มคือการเข้าสังคม
- เขียนสิ่งที่เป็นประโยชน์ลง Blog สัปดาห์ละ 3 เรื่องอย่างต่ำ
- นึกเสมอว่ากำลังทำอะไรอยู่ แล้วจะต้องทำให้เสร็จเมื่อไร
- เข้าครัวทำอาหารจริงๆจัง
- ไปกางเต๊นท์นอนเดือนล่ะครั้ง
- ถ่ายรูปเดือนละ 2 ม้วน อย่างต่ำ
บางเรื่องเหมือนไม่ได้ช่วยพัฒนาการทำงาน ก็ไม่ได้บอกอยู่แล้วชีวิตมีแต่งานซะหน่อย
แล้วจะเอาเวลาที่ไหนมาทำ
- ทุกวันนี้รู้สึกว่านอนเยอะไป คงต้องนอนน้อยลง
- ใช้เวลาโดยไร้ประโยชน์มากไป ทำโดยไม่คิดจะเสียเวลามาก จะต้องวางแผนก่อน
- ถ้าคิดไม่ออก คิดให้ง่ายๆไว้ก่อน อย่างเพิ่งพร่ำเพ้อเจ้อจนทำอะไรไม่ได้
Hello world!
Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!
ภาษาไทย
