กระทู้เก่าบอร์ด อ.Yeadram
3,262 1
URL.หัวข้อ /
URL
ถามข้อดีข้อเสียการใช้งานฐานข้อมูลบน SQL Server ครั
ขอสอบถามหน่อยครับ
ตอนนี้ผมมีไฟล์ Access ที่มีฐานข้อมูลอยู่บน SQL Server โดยใช้วิธี link table (ODBC)
เนื่องจากไฟล์นี้จะมีผู้ใช้งานหลายคน ซึ่งพบว่าการใช้งานปัจจุบันแต่ละหน้าจอดึงข้อมูลช้าอย่างชัดเจนครับ
*ODBC SQL Server ช้า
ผมได้ลองค้นดูไฟล์ Access เก่าๆ ที่มีคนเคยเขียนไว้พบว่าเขาใช้วิธีสร้าง table ไว้ไนไฟล์ Access อีกไฟล์วางไว้่ที่ share drive
มีรายละเอียดไฟล์ Access ประมาณนี้ครับ
1. ไฟล์ A เปิดใช้งาน
2. Batch file เขียนคำสั่ง Copy File B และ File C ไปวางไว้ที่ Drive D เครื่องตัวเอง (โดยสั่ง Delete File B & C ที่มีอยู่ก่อนหน้า)
3. ไฟล์ B เก็บ table ต่างๆ วางบน Share Drive (มี table K1 และ K2)
4. ไฟล์ C ไฟล์ที่มี Form ต่างๆ และตารางที่ได้ link table K1 และ K2
5. Table K1 Link จากไฟล์ B ที่ Drive D
6. Table K2 Link จากไฟล์ B ที่ Share Drive
เมื่อเข้าใช้งานโปรแกรม Access A จะทำการเรียกใช้งาน Batch file เพื่อ Copy ไฟล์ Access B มาวางไว้ Drive D เครื่องตัวเอง
จากนั้นสังเปิดไฟล์ C และ quit Access A
ทำให้การใช้งานโปรแกรมนี้จะเป็นการใช้งานไฟล์ Access C ที่อยู่บน Drive D โดยข้อมูลที่ใช้ในการ Query หน้าจอต่างๆนั้นจะเป็นข้อมูล Link table K1
เมื่อมีการ insert ข้อมูล ไฟล์ C จะทำการ insert ข้อมูลเข้าไปยัง table K1 จากนั้นเมื่อกด submit1 ข้อมูลที่ Insert จะถูก Append ไปที่ Link table K2
(ทำให้ตอนนี้ K1 และ K2 มีข้อมูล update เท่ากัน)
สรุปคือ ไฟล์ Access ที่ User ใช้ทำงานจะเป็นการ Link data จากเครื่องของ User เอง(Copy ไฟล์ที่เก็บ table ปลายทางมาไว้ Drive D) ทำให้โปรแกรมทำงานได้รวดเร็วกว่าการทำ Link table ODBC บน SQL Server ครับ
ยกเว้นตอนเปิดโปรแกรมที่ต้องรอ Copy ไฟล์ให้เสร็จก่อนใช้งานซึ่งไม่นานนัก
จุดที่สงสัยคือข้อดีข้อเสียจาก 2 วิธีนี้ครับ
จากข้อดีข้อเสียถ้าจะแนะนำให้ออกแบบวิธีไหนที่เหมาะสมกว่ากันครับ
*ข้อมูลในระบบประมาณ 100000 (2 ตารางตารางละ 100000) ส่วนที่อยู่บน SQL Server ผมแยก data ออกไปเก็บที่ Archive table ประมาณ 70000 เหลือที่ Active จริงๆ ประมาณ 30000 รายการ (ตารางละ 30000) แต่ก็ยังช้ากว่าอีกวิธีที่มีข้อมูลเต็มๆ 100000 รายการครับ
**ส่วนของรายละเอียดผมไม่ค่อยแน่ใจครับเนื่องจากไฟล์ฐานข้อมูลใส่ Password ไว้ครับ
***ถ้าส่วนไหนที่ผมเขียนอธิบายไม่ถูกหรือไม่เห็นภาพสอบถามเพิ่มเติมได้นะครับ
ขอบคุณครับ
ตอนนี้ผมมีไฟล์ Access ที่มีฐานข้อมูลอยู่บน SQL Server โดยใช้วิธี link table (ODBC)
เนื่องจากไฟล์นี้จะมีผู้ใช้งานหลายคน ซึ่งพบว่าการใช้งานปัจจุบันแต่ละหน้าจอดึงข้อมูลช้าอย่างชัดเจนครับ
*ODBC SQL Server ช้า
ผมได้ลองค้นดูไฟล์ Access เก่าๆ ที่มีคนเคยเขียนไว้พบว่าเขาใช้วิธีสร้าง table ไว้ไนไฟล์ Access อีกไฟล์วางไว้่ที่ share drive
มีรายละเอียดไฟล์ Access ประมาณนี้ครับ
1. ไฟล์ A เปิดใช้งาน
2. Batch file เขียนคำสั่ง Copy File B และ File C ไปวางไว้ที่ Drive D เครื่องตัวเอง (โดยสั่ง Delete File B & C ที่มีอยู่ก่อนหน้า)
3. ไฟล์ B เก็บ table ต่างๆ วางบน Share Drive (มี table K1 และ K2)
4. ไฟล์ C ไฟล์ที่มี Form ต่างๆ และตารางที่ได้ link table K1 และ K2
5. Table K1 Link จากไฟล์ B ที่ Drive D
6. Table K2 Link จากไฟล์ B ที่ Share Drive
เมื่อเข้าใช้งานโปรแกรม Access A จะทำการเรียกใช้งาน Batch file เพื่อ Copy ไฟล์ Access B มาวางไว้ Drive D เครื่องตัวเอง
จากนั้นสังเปิดไฟล์ C และ quit Access A
ทำให้การใช้งานโปรแกรมนี้จะเป็นการใช้งานไฟล์ Access C ที่อยู่บน Drive D โดยข้อมูลที่ใช้ในการ Query หน้าจอต่างๆนั้นจะเป็นข้อมูล Link table K1
เมื่อมีการ insert ข้อมูล ไฟล์ C จะทำการ insert ข้อมูลเข้าไปยัง table K1 จากนั้นเมื่อกด submit1 ข้อมูลที่ Insert จะถูก Append ไปที่ Link table K2
(ทำให้ตอนนี้ K1 และ K2 มีข้อมูล update เท่ากัน)
สรุปคือ ไฟล์ Access ที่ User ใช้ทำงานจะเป็นการ Link data จากเครื่องของ User เอง(Copy ไฟล์ที่เก็บ table ปลายทางมาไว้ Drive D) ทำให้โปรแกรมทำงานได้รวดเร็วกว่าการทำ Link table ODBC บน SQL Server ครับ
ยกเว้นตอนเปิดโปรแกรมที่ต้องรอ Copy ไฟล์ให้เสร็จก่อนใช้งานซึ่งไม่นานนัก
จุดที่สงสัยคือข้อดีข้อเสียจาก 2 วิธีนี้ครับ
จากข้อดีข้อเสียถ้าจะแนะนำให้ออกแบบวิธีไหนที่เหมาะสมกว่ากันครับ
*ข้อมูลในระบบประมาณ 100000 (2 ตารางตารางละ 100000) ส่วนที่อยู่บน SQL Server ผมแยก data ออกไปเก็บที่ Archive table ประมาณ 70000 เหลือที่ Active จริงๆ ประมาณ 30000 รายการ (ตารางละ 30000) แต่ก็ยังช้ากว่าอีกวิธีที่มีข้อมูลเต็มๆ 100000 รายการครับ
**ส่วนของรายละเอียดผมไม่ค่อยแน่ใจครับเนื่องจากไฟล์ฐานข้อมูลใส่ Password ไว้ครับ
***ถ้าส่วนไหนที่ผมเขียนอธิบายไม่ถูกหรือไม่เห็นภาพสอบถามเพิ่มเติมได้นะครับ
ขอบคุณครับ
1 Reply in this Topic. Dispaly 1 pages and you are on page number 1
Time: 0.8463s
ลองอ่าน https://msdn.microsoft.com/en-us/library/dd942824%28v=office.12%29.aspx ดูก่อน สองหัวข้อแรก (Table Performance Tips และ Linked Databases and Linked Tables) ผมว่าสำคัญ เป็นสิ่งที่ควรจัดการให้เป็นไปตามคำแนะนำของเขา แล้วเพิ่มเติมด้วย http://allenbrowne.com/QueryPerfIssue.html ถ้าอ่านหมดแล้ว แล้วยังปวดหัวไม่สะใจพอ ก็ให้อ่าน https://msdn.microsoft.com/en-us/library/bb188204.aspx ต่อไปได้เลย แนะนำว่าเมื่อแก้ไขแต่ละจุดแล้ว ก็ให้รันเพื่อดู performance ว่าเป็นที่น่าพอใจหรือยัง ถ้าพอใจแล้ว จะไม่ปรับแต่งต่อไปก็ได้
ส่วนปริมาณข้อมูลนั้น จะล้านเรคอร์ดก็ถือว่าน้อย ไม่ต้องไปแยกเก็บหรอกครับ สำคัญคือสร้าง Primary Key, Index และ Clustered Index ได้เหมาะสมหรือไม่
ส่วนเรื่องวิธีที่ 2 นี้ ดูว่าดีในกรณีที่มีการปรับปรุงโปรแกรมอยู่เรื่อยๆ สามารถใส่โปรแกรมใหม่ (C) เข้าไปที่แชร์โฟลเดอร์เพียงจุดเดียว แล้ว A ก็จะไปอ่านมาใช้งาน ทำให้ง่ายต่อการจัดการ แต่ผมไม่เข้าใจว่าทำไมถึงมีไฟล์ B เข้ามาเกี่ยวข้อง ผมเข้าใจว่ามันคือฐานข้อมูลของ Access เอง (.mdb, .accdb) แต่ทำไมทำอย่างนั้นก็ไม่รู้