Category Database

[MySQL] การจัดการเมื่อต้อง Query กับฐานข้อมูลที่ขนาดใหญ่

บางครั้งเรามี Query ที่ Join Table เยอะๆ และมีผลลัพธ์มหาศาลประมาณหลายแสนรายการครับ เราอาจจะมีการปรับจูน DB เช่น ทำ Index หรือทำ Query Cache เป็นต้น แต่ในมุมของ Dev เราสามารถปรับโปรแกรมได้เหมือนกัน โดยปรับ Query จากเดิมที่ Join กับหลายๆ Table มา Query ตรงๆที่ละ Table แล้วนำข้อมูลมา Process ใน App แทนครับ

[DB2] Query ตรวจสอบการ Set Automatic Storage ของ Table Space

IBM DB2

เมื่อวานได้ลองขึ้น DB สุดท้ายแล้ว พอทดสอบ Run App มันแจ้ง Error นี้ครับ SQL0289N Unable to allocate new pages in table space “USERSPACE1”. SQLSTATE=57011 สาเหตุ DB2 มันจัดสรรพื้นที่ให้ไม่ได้ แต่การที่เราจะแก้อะไร ควรจะดู Config เก่าก่อน สำหรับ Query ที่เอาไว้ตรวจสอบ Automatic Storage ของแต่ละ Table Space มีการกำหนด (YES หรือ NO) สามารถดูได้จาก…

[DB2] ลองใช้ Execution Plan เพื่อดูว่า Query ที่เขียนนั้นแย่ หรือไม่

IBM DB2

บทความแรกของปี 2016 เลย (จริงๆ Plan ว่าจะเขียนนานแล้ว แต่ติดงานประจำที่ Change บ่อยมากๆ) วันนี้เลยไปเจอ Shell Script ของ AIX ตั้งนึง ที่ทำหน้าดึงข้อมูลมาใส่ใน Temp Table และส่งออกเป็น Text File ไประบบอื่นผ่าน FTP แต่ปัญหา คือ ว่ามันช้ามากกกกกกกกกกกกก รันเกือบ 20 นาทียังไม่ออกเลย จาก Query ตัวอย่าง เราจะพบว่า มัน Self Join เยอะมากก ซึ่งใน DBMS ถ้าตัวเจ๋งๆ…

[DB2] Set DB2CODEPAGE

CODEPAGE คือ อะไร ? CODEPAGE มองง่ายๆเลย คือ คำสั่งที่บอกให้เครื่องคอมพิวเตอร์รู้ว่า เรากำลังใช้ภาษาอะไรอยุ่กับมัน เช่น ภาษาไทย ภาษาอังกฤษ ซึ่ง Vender แต่ละค่ายได้แก่ Microsoft, SAP, ORACLE เป็นต้น ออกมาตรฐาน CODEPAGE ของตัวเองมา อย่างภาษาไทยมี CODEPAGE เช่น Windows-874,Tis-620,UTF-8 ทำไมภาษาไทย อันเดียวถึงมีหลากหลาย CODEPAGE ? เพราะ แต่ละเจ้าต้องการเป็นผู้นำ และก็เป็นเรื่องประสิทธิภาพด้วย เพราะ ถ้า Vender  พัฒนา CODEPAGE เอง ตัว Vender สามารถจะโมปรับแต่งให้เข้ากับระบบงานของตัวเองได้ง่ายด้วย…

[DB2] เปิดใช้งาน Hierarchical Queries

IBM DB2

Hierarchical queries อันนี้จริงๆเป็น Feature ลับของทาง Oracle ครับ โดยนำมาช่วยให้สามารถ Query ข้อมูลยาก และซับซ้อนได้ง่ายขึ้นครับ เช่น มีข้อมูล Company อยากรู้ว่า Company รายการนี้ มีบริษัทลูกกี่ตัว เป็นต้นครับ (อันนี้เดี๋ยวของไปเขียน Blog ยกอีกตอนครับ หุหุ) สำหรับการเปิดใช้ Feature Hierarchical queries สามารถใช้คำสั่งง่ายๆ ดังนี้ ข้อควรระวัง: การเปิดใช้ Hierarchical queries นั้นช่วยให้สามารถ Query ข้อมูลแบบลำดับขั้นได้แล้ว แต่ Performance ของ DB…

[DB2] หา Table / Column ตาม SQL Error Message

IBM DB2

พอดีเจอมาหลายครั้งแต่ แต่ก็ยังไม่ได้เขียนสักที ในระหว่างเราพัฒนาโปรแกรมเชื่อมต่อกับฐานข้อมูล DB2 บ่อยครั้งมักมี Error Message ของตัว SQL แล้วทีนี้ เราจะรู้ได้อย่างไรว่ามัน Error ที Table ไหน เพื่อทีจะได้หาสาเหตุได้อย่างรวดเร็วครับ โดยมีได้มี Error Message ดังนี้ ERROR [23502] [IBM][DB2/NT64] SQL0407N Assignment of a NULL value to a NOT NULL column “TBSPACEID=2, TABLEID=1111, COLNO=7” is not allowed.…

[DB2] Toad กับการแสดงข้อมูลประเภท CLOB ในผลลัพธ์ที่ได้จากการ SELECT

IBM DB2

ก่อนอื่นที่เราจะมาดูพวก Setting ใน TOAD กัน เราต้องรู้ก่อนนะครับว่า CLOB คือ Character Large Object แปลตรงตัวเลยครับ เป็นชนิดช้อมูลที่เก็บตัวอักษรเยอะๆมากๆครับของ DB2 ถ้าใน SQL Server จะเป็น Type Text ครับ เนื่องจากข้อมูลมันใหญ่มากๆครับ ตัว Toad เลยจึงไม่สนใจ Field ประเภทนี้ เมื่อเราได้ SELECT ข้อมูลครับ และเพิ่มความเร็วใจการทำงานของ Toad ด้วยครับ โดยแสดงเป็นคำว่า (Excluded)  ดังรูป สำหรับการเปิดโปรแกรม Toad แสดงข้อมูลประเภท CLOB…

[DB2] SQL1159 Initialization error with DB2 .NET Data Provider / SQLSTATE IM004, Error Reason Code 10

black and white piano keys

พอดี Application ที่ทำตัวเป็นลูกครึ่งผมระหว่างระบบเก่า และใหม่ จึงมีการเชื่อมต่อเข้ากับ DB2 2 แบบ ได้แก่ ODBC และ DB2 .NET Data Provider และพบ Error ดังนี้ สำหรับตัว ODBC มีรูปแบบ Error ดังนี้ รูปแบบ Error สำหรับตัว ODBC การแก้ไข: ให้ไปเพิ่มสิทธิของ User ที่ใช้งาน Application ให้อยู่ในกลุ่ม DB2ADMNS หรือ DB2USERS ครับ สำหรับตัว DB2 .NET…

[DB2] เรียง ID ของแถวตามเงื่อนไขด้วย Function ROW_NUMBER()

IBM DB2

จริงๆช่วงนี้มีอะไรให้เขียน Blog ได้หลายตอนครับ แต่เวลา และปริมาณงานนี่สิไม่เคยพอ เข้าเรื่องเลยดีกว่า ตอนนี้ผมมีหน้าจอนึง ซึ่งแต่ละแถวใน Grid จะมี Column ซ่อนไว้ ชื่อ “SEQNO” เอาไว้เป็น Key คู่กับ Column “COMPANYID” เพื่อเอาไปใช้อ้างอิงในหน้าจออื่นๆที่เรียกใช้งาน ตอนแรกดูเหมือนว่า IDEA นี้น่าจะดี แต่มันมีสิ่งที่ผิดพลาดเรื่องนึงครับ คือ Column “SEQNO” แทนที่มันจะ Auto Increment มันดันเอา Mx + 1 ครับ มันเลยเกิดปัญหาที่ว่า ถ้า User มีข้อมูลใน Grid 4 แถว Column “SEQNO”…