9/23/2010

Asterisk kill line

>soft hangup [channel]

Asterisk hangup causes

http://gotoknow.org/blog/patrickz/157180

Q.931
http://en.wikipedia.org/wiki/Q.931

asterisk ลดสายค้าง

zapata.conf
...
[channels]

...

priindication=outofband
busydetect=yes
busycount=4
busypattern=500,500
callprogress=yes

....

9/22/2010

Mysql query command

-Use regular expressions in MySQL SELECT statements :

MySQL allows the following regular expression metacharacters

. match any character
? match zero or one
* match zero or more
+ match one or more
{n} match n times
{m,n} match m through n times
{n,} match n or more times
^ beginning of line
$ end of line
[[:<:]] match beginning of words [[:>:]] match ending of words
[:class:] match a character class
i.e., [:alpha:] for letters
[:space:] for whitespace
[:punct:] for punctuation
[:upper:] for upper case letters
[abc] match one of enclosed chars
[^xyz] match any char not enclosed
| separates alternatives

Etc.
SELECT * FROM events WHERE id REGEXP '5587$'
SELECT * FROM reviews WHERE description REGEXP '[[:<:]]excellent[[:>:]]'
SELECT something FROM table WHERE column REGEXP 'regexp'

-Describe the column structure of a MySQL table :
describe tablename;

-Display a list of databases on a MySQL server :
show databases;

-Change the MySQL root user password :
#mysqladmin -u root password PaSsWoRd

Mysql Save MySQL query results into a text or CSV file

SELECT order_id,product_name,qty
FROM orders
INTO OUTFILE '/tmp/orders.txt'

or

SELECT order_id,product_name,qty
FROM orders
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

Import CSV file directly into MySQL

load data local infile 'uniq.csv' into table tblUniq
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(uniqName, uniqCity, uniqComments)

9/03/2010

MSSQL : การทำ Performance Tuning SQL Query เบื้องต้น

ตอนนี้ผมจะได้กล่าวถึงสิ่งที่ควรปฏิบัติในการออกแบบ Database ซึ่งส่วนใหญ่จะหนักไปทาง data storage โดยพอจะสรุปเป็นข้อๆ ได้ดังนี้ครับ

1) ใช้ Normalization เพื่อ Optimize Transactional Process
การทำ Normalization นั้น จะช่วยในมุมการใช้คำสั่ง Insert, Update, Delete ครับ ทำให้เกิด Performance ที่ดีครับ แต่จะมีผลตรงกันข้ามกับคำสั่ง Select เพราะว่าใน Database หลายๆ ตัวที่ผมเคยเจออาจจะพบว่า Query เร็ว แต่ Insert ช้าก็ได้ครับ

2) แยกไฟล์ MDF และ LDF ไว้กันคนละ physical disk
โดยคำสั่ง Insert, Update, Delete จะกระทำกับไฟล์ LDF เป็นหลัก ทั้งนี้ในงาน multi-user ขนาดใหญ่แล้วจะเกิด load read-write อยู่บน physical disk ก้อนเดียวกัน ถ้าเป็นไปได้ก็ควรจะแยกไฟล์ MDF และ LDF ไว้คนละ physical disk ก็จะทำให้เกิดการแบ่ง load read-write ไปไว้คนละ physical disk (ผมเคยทำมาหลายงานแล้ว เร็วขึ้นมา 10 เท่าก็เคยเจอครับ)

3) แยก tempdb ไว้บน harddisk ก้อนใหม่
หลักการจะเหมือนกับการแยกไฟล์ MDF และ LDF ครับ คือการแยก load แต่ tempdb จะเป็น temp สำหรับ database ทุกก้อนที่อยู่ใน Server ครับ ลองคิดดูเล่นๆ สิครับว่า tempdb จะรับงานหนักแค่ไหน ถ้าเป็นไปได้ก็ควรแยก tempdb ไว้คนบน physical disk ต่างหากได้จะดีมากครับ

4) สำหรับ table ขนาดใหญ่ให้ใช้ Table partition
การทำ table partition เป็นการแยก load ทาง horizontal โดยจะทำได้ตั้งแต่ sql server 2005 ขึ้นไป เป็นวิธีการกระจาย load ที่ฉลาดมากที่สุดวิธีหนึ่ง โดยสามารถกำหนดเงื่อนไขในการแบ่ง table เช่น แบ่งตามปีที่ซื้อสินค้า, แบ่งตามแผนก เป็นต้น ส่วนวิธีการสร้าง table partition จะไว้เขียนในตอนต่อๆ ไปครับ

5) สำหรับ database ขนาดใหญ่ให้ใช้วิธีการแยกไฟล์ออกเป็นหลายๆ ไฟล์โดยใช้ File Group
หลักการจะเหมือนกับการทำ partition table แต่เป็นระดับ Database แทน โดยการแยก table กระจายไปแต่ละ physical disk แต่วิธีการแยกเราจะใช้ file group ซึ่งสามารถทำได้ทุกเวอร์ชั่นของ SQL Server

6) เมื่อใช้ Data type แบบ TEXT, NTEXT, IMAGE ให้แยกเก็บต่างหากจาก Table Storage
โดยปกติแล้วการเก็บข้อมูลของ column ที่มี data type เป็น text, ntext, image นั้นจะเก็บอยู่ใน page เดียวกับ column อื่นๆ เพราะฉะนั้น เวลาใช้คำสั่ง select ก็จะทำให้ sql server ไปอ่าน column เหล่านี้ขึ้นมาด้วย ซึ่งถือว่าเป็น column ที่พิเศษ ดังนันจึงควรจะทำการแยก column ที่เป็น text, ntext, image แยกออกมาต่างหาก เพื่อเพิ่ม performance โดยใช้คำสั่ง

EXEC sp_tableoption 'orders', 'text in row', 'ON'

7) พยายามใช้ constraint ที่เป้น built-in เช่น primary key, foreign key, check, default, unique แทนการเขียน trigger ขึ้นมาเอง
contraint ต่างๆ ที่มีอยู่แล้ว ทาง microsoft ได้ทำการทดสอบเรื่อง performance มาเป็นอย่างดีอยู่แล้ว พยายามใช้ built-in เป็นหลักเพื่อให้ได้ performance ที่ดี แต่ถ้า built-in ที่มีอยู่ ไม่สามารถตอบสนองสิ่งที่เราต้องการได้จริงๆ ถืงจะเริ่มนึกถึงการเขียน trigger ขึ้นมาใช้งานเองอีกทีนึงครับ

8) แยก Index ไว้คนละ Physical Disk โดยใช้ File Group
การสร้าง index จะทำให้การ access data ทำได้เร็ว แต่ก็ควรที่จะแยก index ไว้คนละ physical disk โดยใช้ file group เหมือนกันครับ รับรองว่าไม่ผิดหวัง

9) ใช้ Disk RAID เพื่อเพิ่ม Performance
สุดท้ายจริงๆ ถ้ามีงบประมาณมากหน่อย ก็อาจจะนึกถึงการซื้อ Hardware RAID Disk ซึ่งจะได้ performance ที่ดีแน่นอน

MSSQL : การกู้ข้อมูล SQL ที่ยังไม่ได้ Backup ด้วย Tail Log

สำหรับท่านที่ดูแลฐานข้อมูล Microsoft SQL Server อยู่ อาจจะเคยประสบปัญหาเกี่ยวกับฐานข้อมูลพังกันมาไม่มากก็น้อยหล่ะครับ ทีนี้เมื่อฐานข้อมูลพัง เราจะทำยังไงดีหล่ะครับ แน่นอน ก็คงจะนึกถึงชุด backup ล่าสุดที่เราได้เคย backup ไว้ แล้วก็พยายามจะ Restore ขึ้นมา แต่ก็เป็นอย่างที่คิดไว้แหล่ะครับ เราก็จะกู้ได้เฉพาะข้อมูลที่เราได้ backup ไปแล้วเท่านั้น ส่วนข้อมูลที่ยังไม่ได้ backup หล่ะ!!!

โครงสร้างของ SQL Database
อย่างที่หลายๆ ท่านทราบกันดีว่าใน 1 sql database จะต้องมีไฟล์ ดังนี้

Data File (.mdf)
Transaction Log File (.ldf)
ในไฟล์ ldf นี่แหล่ะครับ ที่จะยังมี data ที่เรายังไม่ได้ backup อยู่!!!

คำสั่งต่อไปนี้เป็นวิธีการกู้ข้อมูล โดยดึง data ที่อยู่ในไฟล์ ldf ขึ้นมาครับ แต่ต้องมีข้อแม้ว่าไฟล์ ldf จะต้องไม่เสียด้วยนะครับ (ถ้าเสียก็เศร้าหล่ะครับ)

BACKUP LOG AdventureWorks
TO Disk = ‘c:\backup\adv_log.bak’
WITH NO_TRUNCATE;
GO