ทางด้านเทคนิคของ SQL Server bulletin - วิธีการแก้ปัญหาการล็อกตาย

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 832524 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้


กระดานข่าวด้านเทคนิคของเซิร์ฟเวอร์ SQL

หัวข้อที่ครอบคลุมในฉบับนี้:วิธีการแก้ปัญหาการล็อกตาย

เป้าหมาย

เพื่อระบุ แก้ไข และ เพื่อแนะนำการแก้ไขปัญหาสำหรับการแก้ปัญหาการปิดตาย

คำแนะนำ

บทความนี้ตรวจสอบสถานการณ์การชะงักงัน และอธิบายขั้นตอนการแก้ปัญหาการล็อกตาย แต่ละการชะงักงันอาจแตกต่างกัน และอาจมีสาเหตุจากตัวแปรสภาพแวดล้อมที่แตกต่างกันหลาย ๆ ข้อมูลที่ให้ไว้ในบทความนี้สามารถช่วยคุณระบุ และแก้ไขการปิดตาย

กรณีศึกษา

ในกรณีศึกษา เราตรวจสอบระบบ 911 ที่มีหกตัวดำเนินการ ในระหว่างกิจกรรมสูงสุด โปรแกรมประยุกต์ front-end Microsoft Visual Basic จะใช้ประสบการณ์การเชื่อมต่อที่ใช้งานไม่ได้ เนื่องจากการเชื่อมต่อที่ใช้งานไม่ได้ ตัวดำเนินการที่ต้องใหม่ป้อนข้อมูล สำหรับระบบ 911 ที่ดำเนินงาน 24 ชั่วโมงต่อวัน 7 วันต่อสัปดาห์ ลักษณะเช่นนี้เป็นที่ยอมรับ

การล็อกตายคืออะไร

การล็อกตายเกิดเมื่อสองระบบกระบวนการของเซิร์ฟเวอร์ IDs(SPIDs) กำลังรอทรัพยากร และกระบวนการยกเลิกไม่สามารถเลื่อนได้เนื่องจากกระบวนการ theother ขวางจะได้รับทรัพยากร

เธรดของ lockmanager ตรวจสอบสำหรับการหยุดชะงัก เมื่อผู้จัดการการล็อกการชะงักงัน detectionalgorithm ตรวจพบการล็อกตาย ผู้จัดการล็อกเลือกหนึ่ง Spid ที่เป็น avictim การ ตัวจัดการการล็อกเริ่มต้นข้อความข้อผิดพลาด 1205 ที่จะส่งไปยัง theclient และตัวจัดการล็อก kills การ SPID Killing SPID เพิ่ม theresources และช่วยให้ SPID เพื่อดำเนินต่อ Killing SPID ที่เป็นเหยื่อ thedeadlock เป็นสิ่งที่ทำให้การเชื่อมต่อที่ใช้งานไม่ได้ที่ประสบการณ์แอพลิเคชัน Visual Basicfront-สิ้นสุด

ในโปรแกรมประยุกต์ที่ถูกออกแบบมาดี แอพลิเคชันเวอร์ควรพิมพ์ทับสำหรับข้อผิดพลาด 1205 เชื่อมต่อไปยัง SQL Server และส่งธุรกรรมอีกครั้ง

Althoughdeadlocks ถูกย่อให้เล็กสุด พวกเขาไม่สมบูรณ์หลีก นั่นคือเหตุผลที่ทำให้แอพลิเคชัน thefront-สิ้นสุดควรถูกออกแบบมาเพื่อจัดการกับความชะงักงัน

วิธีการระบุการล็อกตาย

ขั้นตอนที่ 1

เมื่อต้องการระบุการล็อกตาย คุณต้องขอรับ loginformation หากคุณสงสัยว่าการล็อกตาย คุณต้องรวบรวมข้อมูลเกี่ยวกับ the(SPIDs) และทรัพยากรที่เกี่ยวข้องในการล็อกตาย เมื่อต้องการทำเช่นนี้ addthe-T1204 - T3605 เริ่มต้นพารามิเตอร์ไปยัง SQL Server และ เมื่อต้องการเพิ่มพารามิเตอร์ twostartup เหล่านี้ ให้ทำตามขั้นตอนเหล่านี้:
  • เริ่มตัวจัดการองค์กรของ SQL Server
  • เลือก และจากนั้น คลิกขวาที่เซิร์ฟเวอร์
  • คลิก'คุณสมบัติ'
  • คลิกเริ่มต้นพารามิเตอร์
  • ในกล่องโต้ตอบพารามิเตอร์เริ่มต้นพิมพ์ -T1204พารามิเตอร์ข้อความกล่อง และจากนั้น คลิกเพิ่ม
  • ในกล่องข้อความของพารามิเตอร์พิมพ์ -T3605แล้ว คลิกเพิ่ม
  • คลิกตกลง

พารามิเตอร์เริ่มต้นจะมีผล เมื่อ SQL Serveris หยุดแล้ว เริ่มใหม่

-T1204 เริ่มต้นพารามิเตอร์ collectsinformation เกี่ยวกับกระบวนการและทรัพยากรเมื่อ detectionalgorithm การชะงักงันตรวจพบการปิดตาย -T3605 เริ่มต้นพารามิเตอร์การเขียน thisinformation การล็อกข้อผิดพลาด SQL Server

รวบรวม startupparameter T1205-ไม่พบข้อมูลทุกครั้งที่อัลกอริทึมการชะงักงันตรวจสอบสำหรับการล็อกตาย การชะงักงัน whena ไม่ คุณไม่จำเป็นต้องใช้พารามิเตอร์การเริ่มต้น-T1205

ถ้าคุณไม่ใช้พารามิเตอร์เริ่มต้น-T1205, sampleof เป็นผลผลิตที่จะอยู่ในแฟ้มบันทึกข้อผิดพลาด SQL Server มีต่อไปนี้:

2003-05-14 11:46:26.76 spid4     Starting deadlock search 1
2003-05-14 11:46:26.76 spid4     Target Resource Owner:
2003-05-14 11:46:26.76 spid4      ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x43CAB580) Value:0x42bdf340
2003-05-14 11:46:26.76 spid4      Node:1       ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x43CAB580) Value:0x42bdf340
2003-05-14 11:46:26.76 spid4     
2003-05-14 11:46:26.76 spid4     End deadlock search 1 ... a deadlock was not found.
2003-05-14 11:46:26.76 spid4     ----------------------------------
2003-05-14 11:46:31.76 spid4     ----------------------------------
2003-05-14 11:46:31.76 spid4     Starting deadlock search 2


บางครั้ง คุณอาจไม่สามารถหยุด และเริ่ม SQL Server ใหม่ ในกรณีดังกล่าว youcan ใช้ตัววิเคราะห์คำถามเพื่อเรียกใช้คำสั่งต่อไปนี้เพื่อเปิดใช้ค่าสถานะ deadlocktrace

หมายเหตุ ด้วยวิธีนี้คุณสามารถรวบรวมข้อมูลเกี่ยวกับการ deadlocksimmediately "-1" บ่งชี้ว่า Spid ทั้งหมด

dbcc traceon (1204, 3605, -1)
go
dbcc tracestatus(-1)
go

ขั้นที่ 2

ถัดไป คุณต้องเก็บการติดตามของผู้สร้างโปรไฟล์ของ SQL Ifyou เปิดการตั้งค่าสถานะการสืบค้นกลับการชะงักงัน คุณจะได้รับส่วนใหญ่ ของการ requiredinformation แต่ไม่เสมอกัน ตัวอย่างเช่น การศึกษา acase identifiedthat ผลลัพธ์ค่าสถานะการติดตามระบบsp_cursoropenเก็บกระบวนงานและ "การอัพเด tblQueuedEvents setnotifyid = 3, ResynchDate " คำสั่งเกี่ยวข้องใน adeadlock แต่คุณไม่ทราบ thedefinition ของกระบวนงานเก็บไว้ของระบบsp_cursoropenคุณ alsodo ไม่มีคำสั่ง UPDATE เสร็จสมบูรณ์ได้เนื่องจากแฟ้ม wastruncated

ตัวสร้างโพรไฟล์ SQL สามารถดูใบแจ้งยอดทั้งหมดนอกเหนือจากแผนการดำเนินการใบแจ้งยอด การติดตามของผู้สร้างโปรไฟล์ของ SQL มีการ lockevent สำหรับ "การชะงักงัน" และ "สายการชะงักงัน" "การชะงักงัน" สอดคล้องกับค่าสถานะ T1204 และ "สายการชะงักงัน" สอดคล้องกับค่าสถานะ-T1205 การเปิดใช้งานสถานะการสืบค้นกลับการชะงักงัน และรันการติดตามของผู้สร้างโปรไฟล์ของ SQL ในระหว่าง occurrenceof การล็อกตายควรให้ข้อมูลที่คุณต้องมีเพื่อแก้ไขปัญหา adeadlock ในกรณีนี้ และ ในผู้ อื่น การรันตัวสร้างโพรไฟล์ SQL เปลี่ยน timingof ดำเนินเพียงพอเพื่อป้องกันการล็อกตาย ดังนั้น คุณจะ typicallycapture ข้อมูล มีค่าสถานะการสืบค้นกลับการชะงักงัน และจากนั้น เรียกใช้ SQLProfiler

การแก้ไขปัญหาการล็อกตาย

หลังจากเกิดการล็อกตาย youcan รวบรวมข้อมูลเกี่ยวกับการล็อกตายตัว โดยใช้โปรแกรมอรรถประโยชน์การsqldiagและ ด้วยการใช้ตัวสร้างโพรไฟล์ของ SQL ในการแสดงผลของแฟ้ม theSQLDiag.txt ค้นหารายการ "รอสำหรับกราฟ" A "รอ-สำหรับกราฟ" entryindicates ว่า การล็อกตายเกิดขึ้น

ต่อไปนี้จะแสดงผลที่คุณอาจพบในล็อกข้อผิดพลาด SQL Server เมื่อคุณใช้พารามิเตอร์เริ่มต้น T1205 เป็น sampleof

2003-05-05 15:11:50.80 spid4    Wait-for graph
2003-05-05 15:11:50.80 spid4    Node:1
2003-05-05 15:11:50.80 spid4    ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x33AE1538) Value:0x193
2003-05-05 15:11:50.80 spid4    Victim Resource Owner:
2003-05-05 15:11:50.80 spid4    ResType:LockOwner Stype:'OR' Mode: X SPID:60 ECID:0 Ec:(0x1F1BB5B0) Value:0x193
2003-05-05 15:11:50.80 spid4    Requested By: 
2003-05-05 15:11:50.80 spid4    Input Buf: RPC Event: sp_cursoropen;1
2003-05-05 15:11:50.80 spid4    SPID: 55 ECID: 0 Statement Type: EXECUTE Line #: 1
2003-05-05 15:11:50.80 spid4    Owner:0x1937f2a0 Mode: S        Flg:0x0 Ref:1 Life:00000000 SPID:55 ECID:0
2003-05-05 15:11:50.80 spid4    Grant List 0::
2003-05-05 15:11:50.80 spid4    KEY: 8:1653632984:2 (da00ce043a9e) CleanCnt:1 Mode: U Fl ags: 0x0
 
2003-05-05 15:11:50.80 spid4    Node:2
2003-05-05 15:11:50.80 spid4    ResType:LockOwner Stype:'OR' Mode: S SPID:55 ECID:0 Ec:(0x33AE1538) Value:0x193
2003-05-05 15:11:50.80 spid4    Requested By: 
2003-05-05 15:11:50.80 spid4    Input Buf: Language Event: Update tblQueuedEvents Set NotifyID = 2, ResynchDate
2003-05-05 15:11:50.80 spid4    SPID: 60 ECID: 0 Statement Type: UPDATE Line #: 1
2003-05-05 15:11:50.80 spid4    Owner:0x1936e420 Mode: X        Flg:0x0 Ref:0 Life:02000000 SPID:60 ECID:0
2003-05-05 15:11:50.80 spid4    Grant List 0::
2003-05-05 15:11:50.80 spid4    KEY: 8:1653632984:1 (2d018af70d80) CleanCnt:1 Mode: X Flags: 0x0


ในรายการ "รอสำหรับกราฟ" คุณมีโหนด 1 และ Node2 ในแต่ละโหนด คุณมีส่วนเงินช่วยเหลือและส่วนร้องขอ Grantsection "รายการ เงินช่วยเหลือ" และส่วนของคำขอคือ "RequestBy"
ในแต่ละโหนด คุณสามารถระบุต่อไปนี้:
  • SPID
  • คำสั่งที่มีการดำเนินการ SPID นี้
  • ทรัพยากร
  • โหมดการล็อคบนทรัพยากร

ตัวอย่างเช่น 1 โหนด รายการเงินช่วยเหลือ SPID 55 ได้รับอนุญาตให้ใช้ล็อคอัพเด โหมด: U บนคีย์ทรัพยากร: 8:1653632984:2 8 = DBID, 1653632984 = ObjectID และ 2 = Indid เมื่อต้องการขอรับหมายเลขรหัสของฐานข้อมูล เรียกใช้กระบวนงานเก็บไว้sp_helpdb เมื่อต้องการขอรับตาราง เรียกใช้รหัสดังต่อไปนี้:
select * from sysobjects where id = 1653632984


เมื่อต้องการขอรับดัชนี เรียกใช้รหัสดังต่อไปนี้:
select * from sysindexes where indid = 2 and id = 1653632984

ถ้า IndexId จะเท่ากับ 2 คุณรู้ nonclusteredindex เป็นดัชนี คำสั่งที่มีการดำเนินการ SPID 55 มีกระบวนงานเก็บไว้sp_cursoropen

โหนด 2 รายการเงินช่วยเหลือ SPID 60 ได้รับอนุญาตให้ล็อกอินแบบเอกสิทธิ์เฉพาะบุคคล โหมด: X บนคีย์ทรัพยากร: 8:1653632984:1.8 = DBID, 1653632984 = ObjectID, 1 = Indid นี่คือบนตารางเดียวกัน แต่ 1 ดัชนีเป็นดัชนีคลัสเตอร์ คำสั่งที่มีการดำเนินการ SPID 60 คือ:
Update tblQueuedEvents Set NotifyID = 2, ResynchDate

มี IndexId ที่เท่ากับ 1 เป็นดัชนีกลุ่ม

AnIndexId ที่เท่ากับ 2 จะเป็นดัชนีกลุ่ม

หมายเหตุ การชะงักงันมีเวลามากที่สำคัญ

ถัดไป ในโหนด 1 ขอตาม SPID 55 ขอล็อกที่ใช้ร่วมกัน โหมด: S บน IndexId = 1 ในโหนด 2 ขอตาม SPID 60 ร้องขอล็อกอินแบบเอกสิทธิ์เฉพาะบุคคล โหมด: X บน IndexId = 2 การร้องขอการล็อก Becausethese เกิดขึ้นในเวลาเดียวกัน เกิดการล็อกตาย แต่ละ SPID'sgranted ล็อคป้องกันการล็อกที่ร้องขอดำเนินการต่อ

ตาราง Thefollowing แสดงแผนภูมิล็อกความเข้ากันได้ องศา aboutlock ข้อมูลเพิ่มเติม ดูหัวข้อ "ล็อคความเข้ากันได้" ใน BooksOnline 2000 เซิร์ฟเวอร์ SQL

แผนภูมิความเข้ากันได้ของล็อก
ยุบตารางนี้ขยายตารางนี้
RequestedmodeคือSUIXหกX
Shared(IS) การปรับค่าสีใช่ใช่ใช่ใช่ใช่ไม่ใช่
ที่ใช้ร่วมกัน (S)ใช่ใช่ใช่ไม่ใช่ไม่ใช่ไม่ใช่
อัพเดต (U)ใช่ใช่ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่
Exclusive(IX) การปรับค่าสีใช่ไม่ใช่ไม่ใช่ใช่ไม่ใช่ไม่ใช่
ใช้ร่วมกับการปรับค่าสีเอกสิทธิ์เฉพาะบุคคล (6)ใช่ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่
Exclusive(X)ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่ไม่ใช่


ถัดไป ด้วยการดูที่ผลลัพธ์ คุณ identifyObjectId 1653632984 เป็นตารางtblQueuedEventsและคุณรับกระบวนงานที่เก็บsp_helpแสดงผลสำหรับตาราง ไม่มีดัชนีที่สองบนตาราง ดัชนีสองถูกix_tblQueuedEventsและPK_tblQueuedEventix_tblQueuedEventsเป็นดัชนีกลุ่มใน ResynchDate และPK_tblQueuedEventเป็นคีย์หลัก ดัชนีกลุ่มเฉพาะบน EventSID

การสืบค้นกลับของผู้สร้างโปรไฟล์ของ SQL ไม่สามารถจับภาพแบบ deadlockoccurrence อย่าลืม การชะงักงันเป็นเวลาที่มากขึ้น ค่าโสหุ้ยของ SQLProfiler อาจเพิ่มเวลาการดำเนินการหนึ่งกระบวนการ andthat ป้องกันไม่ให้ตัวสร้างโพรไฟล์ SQL ต้นในสถานการณ์การชะงักงัน อย่างไรก็ตาม itdid ให้ thatyou ข้อมูลสามารถใช้ในการแก้ไขปัญหา คุณพบคำสั่งtblQueuedEvents thefull update จะคล้ายกับต่อไปนี้:

Update tblQueuedEvents Set NotifyID = 2, ResynchDate = '5/7/2003 10:44:16' where eventSID = 73023
นอกจากนี้คุณพบแผนปฏิบัติการ คุณยังไม่มีคำสั่งเต็มsp_cursoropenเก็บกระบวนงาน แต่คุณมี torecommend ข้อมูลเพียงพอที่จะแก้ปัญหาการชะงักงันโซลูชัน

นี่คือแผน theexecution

หมายเหตุ แผนการดำเนินการที่เฉพาะเจาะจงนี้เป็นแบบอ่านอย่างขวาไป leftand ล่างขึ้นบน

StmtText                                                      
				                                                                           
				   
				                                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
				
Update tblQueuedEvents Set NotifyID = 2, ResynchDate = '5/7/2003 10:44:16'
				where eventSID = 73023                                                     
				   
				                    
|--Clustered Index
				Update(OBJECT:([SOTS].[dbo].[tblQueuedEvents].[ix_tblQueuedEvents ]),
				SET:([tblQueuedEvents].[NotifyID]=[@1],
				[tblQueuedEvents].[ResynchDate]=[Expr1004]))  
     |--Top(1)                                                                 
				                                                                           
				   
				               
           |--Compute Scalar(DEFINE:([Expr1004]=Convert([@2])))                
				                                                                           
				   
				                
                 |--Index
				Seek(OBJECT:([SOTS].[dbo].[tblQueuedEvents].[PK_tblQueuedEvents]),
				SEEK:([tblQueuedEvents].[EventSID]=[@3]) 

แนะนำการแก้ไขปัญหาการแก้ไข thedeadlock

โปรดสังเกตว่า ใบแจ้งยอดการปรับปรุงกำลังดำเนินการ "ดัชนีกลุ่ม update" ในดัชนีคลัสเตอร์ ดังนั้น nonclusteredindex และดัชนีคลัสเตอร์ทั้งสองต้องการ ดัชนีคลัสเตอร์คือix_tblQueuedEventsและPK_tblQueuedEventsเป็นดัชนีกลุ่ม เพื่อทำการปรับปรุง คำสั่ง UPDATE ต้องล็อก obtainexclusive บนดัชนีทั้งสอง ดัชนีที่สองเหล่านี้เป็นดัชนีที่ areinvolved ในการล็อกตาย จากการตรวจทานการสืบค้นกลับของผู้สร้างโปรไฟล์ของ SQL ไม่ได้ไม่ seeany แบบสอบถามที่ใช้ใน ResynchDate ในส่วนคำสั่ง WHERE Statementswere ทั้งหมดที่ระบุ และใช้ในการ EventSID ในส่วนคำสั่ง WHERE ทางเลือกดีกว่าของ clusteredindex จะเป็น EventSID ด้วยข้อมูลนี้และการสนทนากับ thecustomer เราพบดัชนี ResynchDate เก่า และไม่จำเป็น เราขอแนะนำว่า ลูกค้าปล่อยดัชนีix_tblQueuedEventsบน ResynchDate และให้ พวกเขาทำPK_tblQueuedEventในดัชนีกลุ่ม Deadlocksituation การแก้ไขนี้

นี่คือตัวอย่างเดียวของการล็อกตายกรณี involveslocks นั้น การชะงักงันยังสามารถเกี่ยวข้องกับการทำงานแบบขนาน และเกี่ยวข้องกับเธรด พวกเขา caninvolve หนึ่งสอง สอง สาม หรือเพิ่มเติม Spid และทรัพยากร มีกรณีใด ๆ การชะงักงัน คุณต้องขอรับพารามิเตอร์ผลลัพธ์เริ่มต้น –T1204 และ traceto ของผู้สร้างโปรไฟล์ของ SQL ระบุ แก้ไข และเมื่อต้อง การแก้ไขการล็อกตาย Deadlocksituation ของคุณจะเกี่ยวข้องกับกระบวนการอื่นและทรัพยากร ดังนั้น solutionswill แตกต่างไปจากกรณีและปัญหากับกรณี วิธีโดยทั่วไปคุณสามารถใช้เพื่อแก้ไข deadlocksinclude:
  • การเพิ่ม และลบดัชนี
  • เพิ่มคำแนะนำดัชนี
  • การปรับเปลี่ยนแอพลิเคชันเพื่อเข้าถึงทรัพยากรที่อยู่ในรูปแบบที่คล้ายคลึงกัน
  • เอากิจกรรมจากธุรกรรมเช่นเดียวกับทริกเกอร์ โดยค่าเริ่มต้น ทริกเกอร์มีทรานแซคชัน
  • รักษาธุรกรรมที่สั้นที่สุด

อ่านเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการหยุดชะงัก แวะไปเว็บไซต์ต่อไปนี้ของ Microsoft:

http://msdn2.microsoft.com/en-us/library/Aa213040

http://msdn2.microsoft.com/en-us/library/aa213042 (SQL.80).aspx

http://msdn2.microsoft.com/en-us/library/aa213028 (SQL.80).aspx

http://msdn2.microsoft.com/en-us/library/aa937573 (SQL.80).aspx

http://msdn2.microsoft.com/en-us/library/aa213041 (SQL.80).aspx

คุณสมบัติ

หมายเลขบทความ (Article ID): 832524 - รีวิวครั้งสุดท้าย: 10 ตุลาคม 2556 - Revision: 4.0
ใช้กับ
  • Microsoft SQL Server 2000 Standard Edition
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:832524

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com