ดึงข้อมูลจาก server ช้ามากคัรบ
กระทู้เก่าบอร์ด อ.Yeadram

 6,210   11
URL.หัวข้อ / URL
ดึงข้อมูลจาก server ช้ามากคัรบ

สอบถามหน่อยครับ ตอนนี้ผมใช้โปรแกรมขายของที่หน้าร้าน ซึ่งใช้ database เป็น access ครับ โดยผมได้ run program นี้เป็นเครื่องแม่กับเครื่องลูก ผมสังเกตุเห็นว่าการ run บนเครื่องลูกผ่าน network gigabit ยังคงดึงข้อมูลได้ช้า
หมายเหตุสิ่งที่ผมได้ทำไป
1. เปลี่ยนระบบ network ทั้งหมดให้เป็น gigabit คือ router เป็น gigabit, สาย lan เป็น cat 6
2. ข้อมูลการขายในโปรแกรม 4 ปีที่ผ่านมา ประมาณ 2 แสนกว่ารายการ ผมจึงลองลบข้อมูลเก่าออกไปจนเหลือ 1 แสนกว่ารายการ ผลปรากฎว่า ความเร็วในการดึงและค้นหาข้อมูลเพิ่มขึ้นครับ

จึงสอบถามผู้รู้หน่อยครับว่ามีวิธีให้ทำให้การค้นหาข้อมูลใน database access เร็วขึ้นโดยไม่ต้องลบข้อมูลเก่าทิ้งบ้างมั้ยครับ ขอขอบคุณล่วงหน้าครับ

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R23884
pack ข้อมูลบ่อยๆ

เพิ่มความเร็วคอมตัวแม่ (ตัวแม่ควรเป็น windows server
(เพิ่ม speed cpu + ram + ssd รุ่นใหม่ๆ )

การออกแบบ query ที่ดี

ถึงจุดๆ หนึ่งก็จะไม่สามารถ แก้ไขได้ ต้องเปลี่ยน เป็น ms sql server หรือ ตัวอื่น ที่ เป็น database รุ่นใหญ่ ที่ programmer ถนัด

(ความคิดเห็นส่วนตัว)
2 @R23885
จากประสบการณ์ที่เคยใช้ Access เป็น Database ดึงข้อมูลเกือบล้านเรคคอร์ด ก็ยังไม่ช้าเท่าไหร่นะครับ ยกเว้นมีการประมวลผลข้อมูลจากคิวรี่ที่มีการ Join Table กันมากเกินไป แต่ตอนนี้ใช้ MySQL แล้วครับ
3 @R23886
ขอบคุณสำหรับคำแนะนำนะครับ เบื้องต้นผมลองอ่านกระทู้เก่าๆ เกี่ยวกับการ split database โดยนำ frontend ไปไว้ที่เครื่องลูกและ backend ไว้ที่เครื่องแม่ ก็ไม่ได้ทำให้การดึงข้อมูลเร็วขึ้นครับ แต่สิ่งที่เห็นชัดเจนคือมี reliability สูงขึ้น เช่นการ key ขายพร้อมกัน โปรแกรมก็จะไม่หลุดครับ

สิ่งที่จะทำต่อไปคือติดตั้ง window server ตามที่คน admin@crtradin.net แนะนำ แล้วจะดำเนินการทดสอบต่อไปครับ ได้ผลอย่างไรจะแจ้งอีกทีนะครับ

ข้อมูลเพิ่มเติมคับ ปัญหาการดึงข้อมูลช้าจะเกิดเฉพาะเครื่องลูกข่ายเท่านั้นครับ เครื่องแม่ไม่มีปัญหาครับ ผมมีเครื่องลูกข่ายเพียง 2 เครื่องเท่านั้นครับ

ปล. สอบถามเพิ่มเติมครับ มีวิธี separate database ก้อนใหญ่ ให้เป็นหลายก้อนที่ข้อมูลเชื่อมต่อกันมั้ยครับ

ขอขอบคุณล่วงหน้าครับ
4 @R23887
สอบถามคุณสมชายหน่อยครับ ถ้าผมใช้ frontend วิ่งมาหา backend แล้วใช้ ODBC เชื่อมไปยัง mysql สามารถทำได้มั้ยครับ และจะช่วยให้ระบบผมเร็วขึ้นหรือไม่ครับ ขอบคุณมากครับ
5 @R23888
ทำได้ครับ ผมก็ทำอยู่ ใช้ Access เป็น Front end ส่วน Database ใช้ MySQL โดย Link Table ผ่าน ODBC ซึ่งที่เครื่อง Clients สามารถทำงานพร้อมกันได้หลายๆ
เครื่องโดยไม่มีปัญหาอะไร และไม่เคยหลุด ส่วนปัญหาความช้า เท่าที่ผมสังเกตุดู ไม่ได้มาจากเรื่อง Network หรือการใช้งาน Clients พร้อมกันหลายๆ เครื่อง แต่ส่วนใหญ่ปัญหาจะอยู่ที่การเขียนคิวรี่มากกว่า ถ้าซับซ้อนมากก็จะช้า เช่น บางครั้งการทำ Report ที่จำเป็นจะต้อง Link หลาย Table ผมก็อาจจะเลี่ยงโดยการทำ Make Table Query ก่อน แล้วค่อยใช้มาโครช่วยในรวมขั้นตอนการทำงานเหตุการณ์ต่างๆ เพื่อให้ User โดยกดเพียงปุ่มเดียว
6 @R23890
ขอออกความเห็นนิดนึงครับ windows server อาจจะไม่ช่วยอะไรครับ ตัวฐานอาจจะเปลี่ยนเป็น SSD อาจจะช่วยได้บ้างครับ
7 @R23893
1. ทำ Compact and Repair Database ที่อยู่บนเครื่องเซิร์ฟเวอร์ก่อน

2. Relink ลิงค์เทเบิลบนเครื่องลูกใหม่อีกที แล้วลองเปิดเทเบิล(ไม่ใช่เปิดผ่าน Form) ที่บอกว่ามี 2 แสนเรคอร์ดผ่านลิงค์เทเบิลบนเครื่องลูก ไม่ต้องทำการ sort หรือ filter อะไรทั้งสิ้น หรือถ้ามีอยู่ ก็ให้ remove sort/filter นั้นออกไปจากเทเบิลก่อน ต่อไปให้กดคีย์ Page Down เร็วๆถี่ๆ ดูว่ากว่าจะแสดงแต่ละหน้าออกมานั้น มีการหน่วงจนน่าเกลียดหรือไม่ ถ้าไม่มี ก็น่าจะเกิดจากการที่ไม่ได้สร้าง index ของฟิลด์ต่างๆให้เหมาะสมกับเงื่อนไขในส่วนของ WHERE clause ใน SQL statement ของคิวรี่ หรือเงื่อนไขของการ sort/filter ของฟอร์ม เช่นคุณสั่งดูการขายตามวันที่ แต่ไม่มีทำ index สำหรับฟิลด์วันที่ขายไว้เลย โปรแกรมก็ต้องไล่จัดเรียงทั้ง 2 แสนเรคอร์ดให้หมดเพื่อหาผลลัพธ์ที่ต้องการ ซึ่งต้องช้าแน่นอนครับ ก็ให้เพิ่ม index ที่เหมาะสม แล้วทำข้อ 1 อีกที

แต่ถ้ามีหน่วง อาจเกิดจากมีการคอนฟิก Firewall หรือ Anti Virus อะไรบางอย่างที่ทำให้เกิดการสแกนข้อมูลบนเน็ทเวิร์คอยู่ตลอดเวลา ลองปิดการทำงานแล้วดูว่าช้าอีกหรือไม่ และลอง ping ไปหาเซิร์ฟเวอร์เพื่อตรวจดูว่ามีข้อมูล lost หรือไม่ ถ้ามี พวกอุปกรณ์เน็ทเวิร์ครวมทั้งสายสัญญาณ,หัว RJ อาจมีปัญหาร่วมด้วย
8 @R23894
วันนี้ได้ทำการทดสอบเพิ่มเติมครับ

1. ใช้ window server 2012 แทน window 10 -> ยังไม่พบความแตกต่างครับ

2. ทำตามคำแนะนำของคุณสันติสุข คือทำ index date ให้กับ database -> ความเร็วเพิ่มขึ้นครับ และไม่พบอาการ not responding ในขณะรอข้อมูลตอบกลับมาครับ ต้องขอบคุณคำแนะนำจากคุณสันติสุขด้วยครับ

3. ลองใช้ Microsoft mysql เป็น database แทน access แล้วใช้ front end (access) ดึงข้อมูลมา จากคำแนะนำของคุณสมชาย ตอนนี้ยังติดปัญหา ODBC ไม่สามารถเชื่อมต่อกับ mysql ได้ครับ (ตั้งแต่เมื่อวานจนถึงตอนนี้ครับ) กำลังหาวิธีเชื่อมต่ออยู่ครับ

4. สำหรับคำแนะนำของคุณ pizza_p มีแผนที่จะเปลี่ยนเป็น SSD ในไตรมาส 4 นี้ครับ

ขอขอบคุณทุกๆ ท่านที่ช่วยสละเวลามาให้คำแนะนำครับ
9 @R23895
ขอสอบถามคุณสมชาย และท่านอื่นๆ หน่อยครับ
ตามที่คุณสมชายได้แนะนำเรื่อง ใช้ mysql เป็น backend แทนแล้วใช้ frontend access odbc เชื่อมต่อเข้าไปที่ mysql ตอนนี้สามารถนำมาใช้ได้ครับ แต่มันติดปัญหาตรงจะให้รายงานการขายย้อนหลังครับ ในโปรแกรมมันจะฟ้องว่า crystal reports: database error ซึ่งเป็น database ก้อนเดียวกับที่เอาไปไว้ใน mysql ครับ

รบกวนทุกท่านช่วยแนะนำด้วยครับ
10 @R23896
สอบถามครับ ผมสร้าง ODBC เพื่อเชื่อมต่อ mysql จะได้ table ออกมาชื่อว่า db0_sale ผมจึงได้ทำการลบ table ใน access ที่ชื่อว่า sale ออก และทำการ rename table db0_sale -> sale ผมทำแบบนี้ถูกต้องมั้ยครับ
11 @R23899
ถูกต้องครับ ชื่อตารางต้องเหมือนเดิม เพราะถ้าชื่อตารางไม่ถูก คิวรี่ ฟอร์ม รีพอร์ต ที่เราทำไว้แล้ว มันจะอ้างอิงไม่ได้
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2591s