BMS-HOSxP Community
HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: anukul ที่ พฤษภาคม 16, 2007, 05:09:25 AM
-
ทางทันตกรรม แจ้งปัญหา การใช้งาน ช้าลงมาก ในขั้นตอน
1.เวลาเริ่มเข้าเมนู ระบบงานทันตกรรม จะหน่วงเวลา รอแสดงรายชื่อผู้ป่วยทั้งหมดในวันนี้
2.เลือกผู้ป่วยขึ้นมาบันทึกการให้บริการทันตกรรม ไม่ค่อยมีปัญหาช้า แต่พอปิดหน้าต่างนี้ เพื่อกลับไปยังรายชื่อผู้ป่วย่ทั้งหมด จะค้างอยู่ค่อนข้างนานเหมือนตอนเข้าใหม่ ตามภาพ เกิดหน้าว่างๆขึ้น รอ
พบว่า SQL_trace มีปัญหาที่คำสั่งนี้ครับ
50-05-15 17:23:12.343 SQL 10,734 select ovst.*,substring(concat(ovstost.name,' [',spclty.name,']'),1,250) as ovstname,t.pdx as icdcode,icd101.name as icdname,patient.birthday,concat(patient.pname,' ',patient.fname,' ', patient.lname) as ptname,dtmain.dn , r.vn as rx_vn,t.rcpno_list ,dl.dt_list from ovst left outer join vn_stat t on t.vn=ovst.vn left outer join spclty on spclty.spclty=ovst.spclty left outer join patient on ovst.hn=patient.hn left outer join ovstost on ovst.ovstost=ovstost.ovstost left outer join icd101 on icd101.code=t.main_pdx left outer join dtmain on dtmain.vn = ovst.vn and dtmain.tm_no = 1 left outer join rx_operator r on r.vn=ovst.vn and r.pay='Y' left outer join dt_list dl on dl.vn=ovst.vn where ovst.vstdate='2007-05-15' and ovst.vn in ('500515060015','500515060016','500515060018','500515060019','500515060020','500515060022','500515060023','500515060024','500515060025','500515060027','500515060028','500515060029','500515065301','500515065436','500515065536','500515065752','500515070110','500515070252','500515070850','500515071140','500515071521','500515073611','500515075359','500515075728','500515081102','500515081549','500515082542','500515083450','500515083847','500515083913','500515085215','500515085826','500515090900','500515092009','500515092210','500515092839','500515092931','500515094333','500515094455','500515094549','500515094921','500515095635','500515100626','500515101118','500515101719','500515101921','500515103122','500515103249','500515105121','500515110320','500515112023','500515112500','500515112620','500515112730','500515112800','500515112827','500515112932','500515113006','500515113101','500515113217','500515120135','500515124839','500515125018','500515125125','500515125419','500515131052','500515133657','500515133728','500515133737','500515135536','500515144538','500515144829','500515145350','500515162105','500515162247') order by ovst.pt_priority desc,ovst.cur_dep_time,ovst.vsttime
ไม่รู้ว่า รพ.ช้าอย่างนี้หรือไม่ครับ ถ้าปกติดี แสดงว่าปัญหาอยู่ที่ ovst ของมะการักษ์เองนะครับ
NOte : อาการช้าที่ห้องแพทย์ก็ยังคงเป็นอยู่ ยังไม่หายไป
ขอบคุณมากครับ
-
ฝากหมอ ช่วยตัวสอบ
1. ovst มี เรคอร์ดที่เป็น HN,VN ค่าว่างหรือเปล่า
2. dtmain มี เรคอร์ดที่เป็น HN ,VN ค่าว่างหรือเปล่า
;D
-
พบ 1 record ใน ovst ที่ vn is null
ใน dtmain ไม่พบครับ
ผมลบ record นั้นแล้วครับ ที่ห้องฟัน ยังมีหน่วงอยู่เหมือนเดิม (เป็นบางครั้ง แต่บ่อยครับ)
ห้องตรวจแพทย์ คงต้องลองพรุ่งนี้เช้าครับ เพราะเย็นๆ ไม่มีปัญหาหน่วง
-
ฝากอีกตารางครับ
vn_stat ครับ มี VN ที่เป็นค่าว่างหรือเปล่า hn ด้วยครับ
-
คุณหมอลองตรวจสอบที่ระบบ Hardware ดูด้วยนะครับ ว่า Traffic ของข้อมูลในระบบ LAN ของเราหนาแน่นมากหรือเปล่า บางครั้งถ้ามีการรับส่งข้อมูลผ่าน LAN มากๆ ก็สามารถทำให้ระบบอืดได้เหมือนกัน และอีกอย่างถ้าในระบบเราต้องใช้ Switch หลายตัว ถ้าเชื่อมโยงกันไม่ดี เช่น ต่อกันเป็นทอดๆ แบบต่อแถวก็จะทำให้ระบบช้าได้เช่นกัน ทางที่ดีควรใช้ Switch ที่มี Port เยอะๆ เพื่อที่จะได้ใช้ Switch น้อยตัวที่สุด และ Switch ควรใช้ที่มี Port ที่เป็น Gigabit ด้วย โดยควรเชื่อมระหว่าง Server กับ Switch หรือ Switch กับ Switch ด้วย Port Gigabit ครับ...
ผมเคยลองเชื่อมระหว่าง Switch กับ Switch และ Server ด้วย Port 10/100 ดู ปรากฏว่าระบบช้ากว่าเชื่อมด้วย Gigabit อย่างเห็นได้ชัดเลยครับ...โดยเฉพาะที่ห้องตรวจที่คุณหมอบอกว่าจะช้าตอนที่ใช้งานพร้อมกันมากๆ อาจเป็นไปได้ว่า การส่งข้อมูลระหว่าง Client กับ Server มีความซับซ้อนและไม่เร็วพอ อีกอย่างในเวลาราชการจำนวนเครื่องที่ใช้งานอยู่ในระบบ LAN ก็จะมากกว่านอกเวลาอยู่แล้วด้วยครับ...
-
เมื่ออาทิตย์ที่แล้วผมก็เจอปัญหาระบบช้ามากที่จุด Screen สาเหตุมาจาก Traffic ในระบบ LAN นี่แหละครับ...
คือเดิมระบบผมจะมี Switch 10/100 24 port + 10/100/1000 2 port จำนวน 2 ตัว เชื่อมระหว่างกัน และกับ Server ด้วย Gigabit ต่อมาก็เพิ่ม Switch 16 port (ไม่มี Gigabit) อีกตัวโดยเชื่อมเข้า Switch 24 port เดิมด้วย 10/100 Switch 16 port ตัวนี้มี Client เป็นจุด Screen 3 เครื่อง และจุดอื่นๆ อีก 2 เครื่อง....
ที่เกิดปัญหาคือ อยู่ดีๆ จุด Screen ช้าลงไปเฉยๆ โดยไม่ทราบสาเหตุเลยครับ(จุดอื่นก็เป็นแต่ไม่ช้าเท่าที่ Screen) เลยไปนั่งดูที่ Switch ปรากกว่าที่ Switch 16 port ตัวที่เครื่องของจุด Screenเชื่อมอยู่ มีอยู่ port หนึ่งที่ไฟกระพริบไม่หยุดเลย เลยตามไปดูที่เครื่องที่เชื่อมกับ port นี้ ปรากฏว่า กำลัง Download ข้อมูล 30 Mb กว่าๆตัวหนึ่งกะ 40 Mb กว่าๆอีกตัวด้วยโปรแกรม Accelerate จึงแจกใบแดงให้ไป ปรากฏว่าระบบกลับมาทำงานได้เร็วเหมือนเดิม...และที่สำคัญอีกอย่างคือการใช้พวก Bittorrent ลองตรวจสอบดูว่ามีใครแอบใช้หรือเปล่า.......
ปัญหาของคุณหมออาจไม่ใช่แบบนี้ก็ได้ แต่ยังงัยก็ลองตรวจสอบดูอีกทางนะครับ.. ;D ;D....
-
ตอนนี้ใช้ MySQL 5.0.x หรือยังครับ ถ้าเปลี่ยนเป็น MySQL 5.0 แล้ว ลองตรวจสอบพื้นที่ว่างของ Harddisk ของ server แล้วลองทำ safe alter ตาราง (ovst,opitemrece,patient,vn_stat) ให้เป็น innodb อีกครั้งครับ
-
เป็น MySQL 5.0.37 แล้วตั้งแต่วันศุกร์ที่ up version ใหม่ 4.10
วันนี้ ช้ามาก ครับ ค้าง ทุก 10 นาที หนักกว่า 2 วันก่อน
เมื่อคืนนี้ ผมมาทำ safe alter ตาราง ovst --> innodb อีกครั้ง แล้วก็ upgrade structure อีกครั้ง คิดว่าน่าจะดีขึ้น พอเช้าขึ้นมา หนักกว่าเดิม ตอนนี้กำลังยุ่งเลย
ผมตรวจสอบตาราง innodb แล้วมันไม่เจอว่า ovst เป็น innodb ครับ ตามรูป เลยไม่รู้ว่า เปลี่ยนได้สำเร็จหรือยัง แต่ตอนทำ มันก็ OK ไม่มีปัญหา
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=2244.15 (http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=2244.15)
-
ทำตามขั้นตอนนี้ครับ
1. พิมพ์ชื่อตาราง และ คำสั่ง
2. กดปุ่ม Execute
-
หน้าจอ Debug จะอยู่ด้านหลัง checkdb window จะแสดงข้อความดังรูปครับ
-
หรือตรวจสอบ แฟ้ม my.cnf อีกครั้งว่าได้เปิดตัวเลือก
skip-innodb
เอาไว้หรือไม่ด้วยครับ
-
อ.ชัยพร ครับ....ผมเห็น version หลังๆมานี่ ใน system setting จะมีให้ใส่จำนวนขนาด RAM ของ Server ด้วย ไม่ทราบว่าจะมีผลต่อการทำงานของระบบโดยรวมหรือเปล่าครับ..ขอบคุณครับ..
-
เอาไว้สำหรับมาช่วยตรวจสอบ configuration ของระบบครับ ว่ากำหนดไว้เหมาะสมหรือไม่
-
ทำตามที่อ.MN แจ้งเลยครับ ขึ้น message เหมือนกัน
แต่ตรวจสอบจาก check table innodb มันก็ไม่พบ หรือ show create table ovst ก็เป็น myisam ผมเลยไม่แน่ใจว่า มันเป็น innodb หรือยัง
my.cnf มีบรรทัด skip-innodb แล้วครับ
คุณ Khuad50 ตรวจสอบระบบเครือข่ายก็ปกติดีครับ ก่อน up ver ก็ใช้งานเหมือนกัน แต่ไม่มีปัญหา
พอดูที่ System Monitor ของ CPU Server พบว่า บางช่วง ขึ้นไปถึง 60-70 % ค้างอยู่ประมาณ 3-4 นาที ช่วงนี้ทำให้ค้างทั้งระบบ มี client connect ~ 80+ ยังไม่รู้ mysql กำลังทำอะไรถึงดึง CPU มาก
-
my.cnf มีบรรทัด skip-innodb แล้วครับ
ต้อง comment บรรทัดนี้ด้วยครับ ให้เป็น
#skip-innodb
-
ลองดูตัวนี้ครับ สำหรับ RAM-SERVER 2GB ขึ้นไป
-
น่าจะปรับปรุง server ใหม่ เช่น
1. OS SERVER--------------- CentOS4.4
2. MySQL SERVER----------- MySQL5.0.37
3. HOSxP --------------------- V.3.50.4.10
:) :) :) :) :) :) :) :)
-
RAM SERVER 2 GB ขึ้นไป
แบบนี้ครับ
-
ขออภัยครับ
skip-innodb ไม่มีใน my.cnf ครับ
-
ต้องพยายามแก้ไขปัญหา ตาราง ให้เป็น innodb ให้ได้ครับ เพราะในการใ้ช้งานที่มีผู้ใช้งานมากๆ จะมี table lock (myisam) ค่อนข้างมาก ซึ่งเป็นสาเหตุหลักของระบบที่ทำงานช้าครับ
-
ผมลองสังเกตุดู ระบบทันตกรรม ซึ่งตอนนี้มีปัญหา มากที่สุด (มากกว่าห้องตรวจแพทย์) พบว่า เวลาเข้าหน้าจอรายชื่อผู้ป่วยทันตกรรม จะใช้เวลานานในคำสั่ง SQL นี้ครับ
Date Time Type Exec Time SQL Text
50-05-16 13:52:37.500 SQL 4,172 select ovst.*,substring(concat(ovstost.name,' [',spclty.name,']'),1,250) as ovstname,t.pdx as icdcode,icd101.name as icdname,patient.birthday,concat(patient.pname,' ',patient.fname,' ', patient.lname) as ptname,dtmain.dn , r.vn as rx_vn,t.rcpno_list ,dl.dt_list from ovst left outer join vn_stat t on t.vn=ovst.vn left outer join spclty on spclty.spclty=ovst.spclty
left outer join patient on ovst.hn=patient.hn left outer join ovstost on ovst.ovstost=ovstost.ovstost left outer join icd101 on icd101.code=t.main_pdx left outer join dtmain on dtmain.vn = ovst.vn and dtmain.tm_no = 1 left outer join rx_operator r on r.vn=ovst.vn and r.pay='Y' left outer join dt_list dl on dl.vn=ovst.vn where ovst.vstdate='2007-05-16' and ovst.vn in ('500516060816','500516060854','500516062738','500516070103','500516072133','500516072246','500516073507','500516081424','500516081917','500516083410','500516083624','500516085211','500516085439','500516091107','500516091506','500516092847','500516093929','500516094107','500516094628','500516094930','500516095708','500516095740','500516095925','500516101036',
'500516101345','500516103137','500516112310','500516113322','500516113341','500516113344','500516115743','500516124031','500516124655','500516124940','500516130705','500516131046','500516131141','500516131941','500516132436','500516133526','500516133721','500516134423','500516134658') order by ovst.pt_priority desc,ovst.cur_dep_time,ovst.vsttime
และเวลาที่เปิดหน้านี้ทิ้งไว้ หน้าจอจะ refresh บ่อยๆ จะค้างเป็นช่วงๆ เกือบนาทีละ 2 ครั้ง ตามรูปครับ
แต่ละครั้ง CPU ของ Server จะขึ้น เกือบ 30 %
-
ใช้คำสั่ง
explain select ovst.*,substring(concat(ovstost.name,' [',spclty.name,']'),1,250) as ovstname,t.pdx as icdcode,icd101.name as icdname,patient.birthday,concat(patient.pname,' ',patient.fname,' ', patient.lname) as ptname,dtmain.dn , r.vn as rx_vn,t.rcpno_list ,dl.dt_list from ovst left outer join vn_stat t on t.vn=ovst.vn left outer join spclty on spclty.spclty=ovst.spclty
left outer join patient on ovst.hn=patient.hn left outer join ovstost on ovst.ovstost=ovstost.ovstost left outer join icd101 on icd101.code=t.main_pdx left outer join dtmain on dtmain.vn = ovst.vn and dtmain.tm_no = 1 left outer join rx_operator r on r.vn=ovst.vn and r.pay='Y' left outer join dt_list dl on dl.vn=ovst.vn where ovst.vstdate='2007-05-16' and ovst.vn in ('500516060816','500516060854','500516062738','500516070103','500516072133','500516072246','500516073507','500516081424','500516081917','500516083410','500516083624','500516085211','500516085439','500516091107','500516091506','500516092847','500516093929','500516094107','500516094628','500516094930','500516095708','500516095740','500516095925','500516101036',
'500516101345','500516103137','500516112310','500516113322','500516113341','500516113344','500516115743','500516124031','500516124655','500516124940','500516130705','500516131046','500516131141','500516131941','500516132436','500516133526','500516133721','500516134423','500516134658') order by ovst.pt_priority desc,ovst.cur_dep_time,ovst.vsttime
เพื่อแสดงว่าตารางไหนที่ไม่มีการใช้ index เข้ามา่ช่วยทำ query ครับ
-
ลองเรียก SQL explain แล้ว สงสัยตาราง dtmain มันว่างๆ ครับ ไม่รู้ใช่สาเหตุหรือเปล่าครับ
ต้องทำยังไงต่อครับ
ขอบคุณมากครับ
-
ใช่แล้วครับ น่าจะเกิดจากตาราง dtmain ไม่มี index ครับ
ผลลัพท์ที่ได้จากของผมนะครับ
-
ได้ลอง check index ในหน้าต่าง upgrade structure แล้วมีการสร้าง index ให้
ลองดู เร็วขึ้นมากเหมือนเดิม (หวังว่านะครับ) ยังไง ขอดูพรุ่งนี้เช้าอีกที แล้วจะแจ้งผลให้ทราบครับ
ขอบคุณมากครับ
-
ถูกหวยอีกแล้วครับ
แต่ไม่ได้แทง
:)
-
BINGO !!!
เช้านี้อากาศสดใส การจราจรคล่องตัวดีมาก ห้องฟันกลับสู่ภาวะปกติ ส่งผลให้บรรยากาศโดยรวมของรพ.ดีขึ้นอย่างเห็นได้ชัด
สรุป ปัญหาที่ทำให้ระบบช้าลง เกิดจาก ฐานข้อมูล โดยเฉพาะตาราง dtmain index หายไป (สาเหตุ ?? แต่เป็นหลังจาก up ver จาก 49.9.13 --> 50.4.10 ใช้เวลานาน และ ข้ามหลายรุ่น)
ได้เทคนิคเพิ่มเติม ใช้คำสั่ง explain 'SQL command ที่เกิดปัญหา' จะแสดงว่าตารางใดบ้างที่ไม่มี index แล้วจัดการ check index
ขอบคุณ อ.MN ช่วยทุกครั้งที่เจอปัญหาครับ
ขออภัยหลายท่านเพราะกระทู้นี้เป็นปัญหาเฉพาะรพ. ไม่ใช่ปัญหาของโปรแกรม แต่หวังว่าน่าจะเกิดประโยชน์บ้างสำหรับ admin รพ.อื่นแม้ยังไม่เกิดปัญหาครับ
ขอบคุณมากครับ
หมายเหตุ : แต่ผมก็ยัง up innodb ไม่ได้อยู่ดีครับ
;) ;) ;)
-
ยินดีด้วยครับ