ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
บัญชีการอนุญาตต้องใช้สิทธิ์ใดในการใช้จดหมายฐานข้อมูล
ฉันมีอินสแตนซ์ SQL Server 2012 ทำงานภายใต้บัญชีบริการที่ได้รับการจัดการ ฉันได้กำหนดค่าเมลฐานข้อมูลด้วยบัญชีเดียวและพยายามส่งทดสอบอีเมล แต่ฉันพบข้อผิดพลาดบางอย่างในบันทึกเหตุการณ์ของเซิร์ฟเวอร์: Database Engine Instance = MYINSTANCE; Mail PID = 2132 ข้อความแสดงข้อผิดพลาด: การอัพเดทฐานข้อมูลล้มเหลว สาเหตุ: สิทธิ์ EXECUTE ถูกปฏิเสธในวัตถุ 'sysmail_logmailevent_sp', ฐานข้อมูล 'msdb', schema 'dbo' อินสแตนซ์ Engine ของฐานข้อมูล = MYINSTANCE; Mail PID = 2212; ประเภทข้อยกเว้น: Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException ข้อความ: การอ่านบนฐานข้อมูลล้มเหลว สาเหตุ: สิทธิ์ EXECUTE ถูกปฏิเสธในวัตถุ 'sp_readrequest', ฐานข้อมูล 'msdb', schema 'dbo' ข้อมูล: …

1
พื้นที่ว่างของ mdf และ ldf ไม่ตรงกับพื้นที่ว่างของฐานข้อมูล
ใน SSMS ฉันเห็นคุณสมบัติที่เกี่ยวข้องกับขนาดไฟล์และพบรายละเอียดด้านล่างสำหรับฐานข้อมูลเดียว ค่าที่นี่ไม่ตรงกับคุณสมบัติอื่น ขนาดที่นี่ของ mdf, ldf และขนาดรวมจะตรงกับค่าอื่น ๆ ภายใต้แต่ละหน้าต่าง แต่พื้นที่ว่างที่มีอยู่ของ mdf และ ldf หากมีการเพิ่มจะไม่เท่ากับพื้นที่ว่างที่มีอยู่ที่แสดงในหน้าต่างฐานข้อมูลที่ลดขนาดและพื้นที่ว่างที่แสดงในคุณสมบัติฐานข้อมูล สิ่งนี้เป็นจริงสำหรับฐานข้อมูลใด ๆ ทำไมถึงเป็นเช่นนั้น ใครช่วยอธิบายตรรกะเบื้องหลังนี้ได้ไหม? ภายใต้คุณสมบัติฐานข้อมูล: ขนาด: 91.31 MB พื้นที่ว่าง: 13.40 MB ภายใต้ความเหมาะสมของไฟล์ฐานข้อมูล: ขนาด mdf: 17 MB ขนาดไฟล์: 75 MB ภายใต้ฐานข้อมูลหดตัว: ขนาดที่จัดสรรในปัจจุบัน: 91.31 MB พื้นที่ว่าง: 13.40 MB ภายใต้ไฟล์ย่อขนาดสำหรับไฟล์ข้อมูล: ขนาดที่จัดสรรในปัจจุบัน: 16.38 MB พื้นที่ว่างที่มีอยู่: 12.63 MB ภายใต้การลดขนาดไฟล์สำหรับไฟล์บันทึก: ขนาดที่จัดสรรในปัจจุบัน: …

2
ฉันควรซ้อนภายนอกเข้าร่วมใน SQL Server หรือไม่
ฉันเคยได้ยินข้อมูลที่หลากหลายเกี่ยวกับเรื่องนี้และหวังว่าจะได้รับความเห็นที่เป็นที่ยอมรับหรือผู้เชี่ยวชาญ หากฉันมีหลายรายการLEFT OUTER JOINแต่ละรายการขึ้นอยู่กับช่วงเวลาสุดท้ายมันจะดีกว่าไหมที่จะซ้อนมัน? สำหรับตัวอย่างที่วางแผนที่JOINจะMyParentขึ้นอยู่กับJOINการMyChild: http://sqlfiddle.com/#!3/31022/5 SELECT {columns} FROM MyGrandChild AS gc LEFT OUTER JOIN MyChild AS c ON c.[Id] = gc.[ParentId] LEFT OUTER JOIN MyParent AS p ON p.[id] = c.[ParentId] เปรียบเทียบกับhttp://sqlfiddle.com/#!3/31022/7 SELECT {columns} FROM MyGrandChild AS gc LEFT OUTER JOIN ( MyChild AS c LEFT OUTER JOIN MyParent …

2
สาเหตุที่เป็นไปได้สำหรับ sp_reset_connection ใช้เวลานานในการดำเนินการคืออะไร?
ทำไมsp_reset_connectionขั้นตอนการจัดเก็บระบบจึงใช้เวลานานกว่าสองสามมิลลิวินาทีในการดำเนินการตามที่ดูผ่าน SQL Server Profiler ฉันทำการสืบค้นกลับอย่างง่ายจากระบบการผลิตโดยใช้ SQL Server Profiler จากนั้นใช้ SqlNexus เพื่อวิเคราะห์ SqlNexus ระบุว่า sp_reset_connection มีระยะเวลาสะสมสูงสุด - 33% ของการติดตามโดยรวม ระยะเวลาที่สังเกตได้อยู่ในช่วง 0-7 วินาที (12 ถึง 6,833,270 ไมโครวินาที) แต่มีค่าเฉลี่ยที่ 0.956 วินาที ฉันเข้าใจว่า sp_reset_connection กำลังถูกเรียกใช้เมื่อมีการใช้การเชื่อมต่อร่วมซ้ำอีกครั้ง ฉันได้เห็นข้อเสนอแนะว่าสิ่งนี้อาจเกิดขึ้นได้เนื่องจากมีร่องรอยจากภายนอกแต่ดูเหมือนจะไม่เป็นเช่นนั้น ฉันได้อ่านสิ่งที่เซิร์ฟเวอร์ทำเมื่อเรียกว่า sproc แต่ฉันไม่เชื่อว่าสิ่งเหล่านี้จะเป็นปัญหาในกรณีนี้ - รหัสไม่ออกจากธุรกรรมเปิดหรือตารางชั่วคราวขนาดใหญ่ที่จะต้องทำความสะอาด ฉันยังดูที่/server/199974/sp-reset-connection-taking-a-long-time-to-runแต่ก็ไม่ได้มีประโยชน์ แก้ไข (2013-12-23): ในทุกกรณีการอ่านและการเขียนคือ 0 และ CPU เกือบตลอดเวลาเป็น 0 (เพียงสองอินสแตนซ์ของ CPU ที่ไม่เป็นศูนย์เท่านั้นซึ่งทั้งสองอยู่ที่ 16ms)

3
คัดลอกข้อมูลขนาดใหญ่จากผลการสืบค้น sql
ใน sql server 2008 ของฉันหลังจากเรียกใช้คิวรีการส่งคืนข้อมูลมีขนาดใหญ่มากเป็นล้าน ฉันพยายามคัดลอก แต่ให้ข้อผิดพลาดหน่วยความจำ sql คุณช่วยบอกให้เรารู้ว่าฉันจะคัดลอกข้อมูลทั้งหมดและวางลงใน excel ได้อย่างไร ฉันไม่ต้องการส่งออกไปยังไฟล์ txt เนื่องจากข้อมูลไม่ได้รับการจัดตำแหน่ง ดังนั้นฉันต้องการคัดลอกและวางลงใน excel ด้วยตนเอง กรุณาแจ้งให้เราทราบวิธีแก้ปัญหาสำหรับเขา


1
ผลกระทบของการรัน sp_updatestats ในเซิร์ฟเวอร์การผลิตคืออะไร
การเรียกใช้sp_updatestatsSQL Server ในสภาพแวดล้อมการผลิตปลอดภัยหรือไม่? หรือมากกว่านั้นอะไรคือผลกระทบของการอัพเดตสถิติทั้งหมดบนเซิร์ฟเวอร์ sql สามารถ "ทำให้หายใจไม่ออก" เซิร์ฟเวอร์ sql ในขณะที่ทำงานและทำให้หมดเวลาหรือปัญหาอื่น ๆ สำหรับผู้ใช้หรือไม่

4
SQL Server เริ่มทำงาน แต่ไม่ได้ฟังพอร์ตใด ๆ
ฉันเพิ่งติดตั้ง SQL Server 2012 ยังไม่มีการสร้างฐานข้อมูล และฉันสามารถเปิด Studio จัดการด้วย sa / รหัสผ่าน Binn \ sqlservr.exe เริ่มทำงานเป็นบริการและฉันเห็นว่ามันเริ่มต้นในรายการบริการ อย่างไรก็ตามมันไม่ได้ฟังพอร์ต 1433 หรือแม้กระทั่งไม่ฟังพอร์ตใด ๆ โดยค่าเริ่มต้นตามที่ฉันตรวจสอบด้านล่าง: tasklist|find /I "sql" ฉันได้: sqlservr.exe 5668 Services 0 40,112 K ที่ 5668 ฉันคิดว่าเป็น PID จากนั้นรับ PID = "5668" กำลังฟังพอร์ตที่: netstat -ano | find /I "5668" แต่ฉันไม่ได้อะไรเลยนอกจากว่างเปล่า ในทางกลับกันหลังจากค้นหาโพสต์ในเว็บไซต์นี้ฉันตรวจสอบการกำหนดค่าเซิร์ฟเวอร์ SQL ของฉันอีกครั้ง: start-> …

1
SentryOne Plan Explorer นับการอ่านเป็น UDF หรือไม่
ฉันมีคำถามเช่นนี้ select dbo.fn_complexFunction(t.id) from mytable t ในSQL Sentry Plan Explorerฉันสังเกตเห็นว่าฉันต้องเรียกใช้ Get Estimated Plan เพื่อให้ Query Plan รวมถึง UDF เมื่อเรียกใช้ 'รับแผนจริง' จะไม่ปรากฏว่าการอ่านเชิงตรรกะและตัวชี้วัดอื่น ๆ รวมถึงการดำเนินการที่เกิดขึ้นใน UDF ในกรณีเช่นนี้การแก้ปัญหาเพียงอย่างเดียวในการใช้ Profiler คืออะไร

2
เกิดข้อผิดพลาดในการเรียกใช้สคริปต์ Powershell ใน SQL Server Agent
ฉันมีงาน SQL ที่ทำงานผ่านตัวแทนของเซิร์ฟเวอร์ SQL (กำลังเรียกใช้ SQL Server 2012 Enterprise) ขั้นตอนสุดท้ายของงานคือการเรียกใช้แอพพลิเคชั่นที่อยู่บนเครือข่ายแชร์ น่าเสียดายที่ฉันไม่ทราบชื่อโฟลเดอร์ที่มีแอปพลิเคชันอยู่ (โฟลเดอร์คือหมายเลขเวอร์ชั่น) ดังนั้นฉันจึงใช้ PowerShell เพื่อค้นหา: set-location "\\server\companydocuments\MyApp\Application Files\" $name = Get-ChildItem | sort name -desc | select -f 1 | select name cd $name.name & ".\Application.exe" ถ้าฉันเปิดหน้าต่าง PowerShell บน SQL Server มันก็ใช้ได้ดี เมื่อฉันเรียกใช้สิ่งนี้ในตัวแทนของเซิร์ฟเวอร์ SQL ฉันได้รับข้อผิดพลาดต่อไปนี้: A job step received an …

1
ความไม่เหมาะสมของการใช้ STATISTICS_NORECOMPUTE
เมื่อไม่นานมานี้ฉันได้มีส่วนร่วมในการบำรุงรักษาชุดฐานข้อมูลที่มีปัญหาดัชนีที่น่าสนใจ หนึ่งในสิ่งที่ทำให้ฉันแย่ที่สุดคือความแตกต่างของดัชนีระหว่างการพัฒนาการทดสอบแบบจำลองและเครื่องจักรการผลิต เนื่องจากความแตกต่างทำให้การปรับแต่งแบบสอบถามค่อนข้างยากที่จะทำการซิงค์เป็นหนึ่งในโครงการแรกของฉัน ในขณะที่ฉันได้เปรียบเทียบสภาพแวดล้อมการทดสอบและแบบจำลองฉันได้สังเกตเห็นว่าดัชนีส่วนใหญ่ในสภาพแวดล้อมแบบจำลองได้STATISTICS_NORECOMPUTEตั้งค่าไว้ONในขณะที่ไม่ได้ทำการทดสอบ ในสภาพแวดล้อมทั้งหมดมีงานยามค่ำคืนที่อัพเดตสถิติของฐานข้อมูลทั้งหมด ฉันไม่เคยจัดการSTATISTICS_NORECOMPUTEมาก่อนดังนั้นนี่คือคำถามของฉัน มีแนวทางปฏิบัติที่ดีที่สุดเมื่อจัดการกับการตั้งค่านี้หรือไม่? หากฉันกำลังอัปเดตสถิติในตอนท้ายของวันดีที่สุดที่จะเปิดSTATISTICS_NORECOMPUTEในทุกสภาพแวดล้อมของดัชนีทั้งหมดหรือไม่ หรือมีเหตุผลที่ดีที่จะไม่? แก้ไข: ฉันได้พบหนึ่งในบล็อกของ Kimberly Tripp ในหัวข้อที่นี่ซึ่งดูเหมือนว่าจะแนะนำว่าSTATISTICS_NORECOMPUTEควรใช้อย่างประหยัดที่สุด แต่ฉันยังคงกังวลเกี่ยวกับการปิดการใช้งานทั่วโลก มีใครลองบ้างและพวกเขามีประสบการณ์อย่างไรบ้าง

1
เงื่อนไขการบันทึกขั้นต่ำใน SQL
ฉันได้เขียนสคริปต์เพื่อทดสอบการอ้างสิทธิ์ที่เกิดขึ้นในหน้านี้http://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspxในตารางชื่อสรุปเงื่อนไขการบันทึกขั้นต่ำเกี่ยวกับเมื่อ การบันทึกที่น้อยที่สุดจะเกิดขึ้นหรือไม่เกิดขึ้น การใช้สคริปต์นี้ฉันพบว่าผลรวมของความยาวบันทึกการใช้งานสำหรับเม็ดมีดแต่ละประเภทมีดังต่อไปนี้: กองว่างไม่มี tablock 60000 กองว่างเปล่าด้วย tablock 56000 กองไม่ว่างเปล่าไม่มี tablock 60000 กองไม่ว่างเปล่าด้วย tablock 56000 ฮีปบวกดัชนีว่างเปล่าไม่มี tablock 126188 ฮีปบวกดัชนีว่างเปล่าด้วย tablock 114188 Heap plus index ไม่ว่างเปล่าไม่มี tablock 138696 ฮีปบวกดัชนีไม่ว่างด้วย tablock 112000 คลัสเตอร์ว่างไม่มีคำสั่ง tablock 64168 คลัสเตอร์ว่างเปล่าเรียงลำดับด้วย tablock 56168 คลัสเตอร์ว่างเปล่าไม่มีการเรียงลำดับ tablock 73388 คลัสเตอร์ว่างเปล่าเรียงลำดับด้วย tablock 65388 คลัสเตอร์ไม่ว่างเปล่าไม่มี tablock 63912 คลัสเตอร์ไม่ว่างเปล่าด้วย tablock 55944 คลัสเตอร์และดัชนีว่างเปล่าไม่มี tablock …

1
คุณจะปิดการใช้งานเข้าสู่ระบบที่ไม่ระบุชื่อได้อย่างไร
ตามเอกสาร MySQLคุณสามารถทำให้เซิร์ฟเวอร์ MySQL แข็งขึ้นได้โดยการเพิ่มรหัสผ่านหรือลบบัญชีที่ไม่ระบุชื่อ หากคุณต้องการป้องกันไม่ให้ลูกค้าเชื่อมต่อในฐานะผู้ใช้ที่ไม่ระบุชื่อโดยไม่มีรหัสผ่านคุณควรกำหนดรหัสผ่านให้กับบัญชีที่ไม่ระบุชื่อแต่ละบัญชีหรือลบบัญชีออก ก่อนที่จะทำให้แข็งตารางผู้ใช้ของฉันมีลักษณะเช่นนี้ mysql> select user,host,password from mysql.user; +------------------+-----------+-------------------------------------------+ | user | host | password | +------------------+-----------+-------------------------------------------+ | root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX | | root | gitlab | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | …
9 mysql  security 

1
การรวบรวมค่าพารามิเตอร์จากเซสชันเหตุการณ์เพิ่มเติม
ฉันใช้กิจกรรมเพิ่มเติมเพื่อติดตามข้อความที่ใช้โดยแอปพลิเคชันของเรา ผมได้สร้างเซสชั่นที่จะเก็บรวบรวมข้อมูลที่ฉันต้องการยกเว้นว่าผมยังต้องการที่จะรู้ว่าเป็นค่าที่แท้จริงของพารามิเตอร์ที่ใช้ ฉันกำลังดำเนินการติดตามนี้ในสภาพแวดล้อมที่ไม่ใช่การผลิตและประสิทธิภาพการทำงานใด ๆ ที่เกิดจากการติดตามเป็นที่ยอมรับได้ ข้อความค้นหาทั้งหมดมาจาก Hibernate และได้รับการกำหนดพารามิเตอร์ในรูปแบบของ: SELECT a, b, c From Customer where CustomerId = @P0 นี่คือการตั้งค่าเซสชันของฉัน CREATE EVENT SESSION [TracingForStatements] ON SERVER ADD EVENT sqlserver.sp_statement_completed ( ACTION ( sqlserver.session_id, package0.collect_system_time, sqlserver.transaction_id, package0.event_sequence ) WHERE ( sqlserver.database_id=555 ) ) ADD TARGET package0.ring_buffer(SET max_memory= 128000) WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS, …

1
ปรับปรุงความเร็วของการสร้างดัชนีใหม่บนเซิร์ฟเวอร์ SQL
ฉันกำลังนำเข้าข้อมูลจำนวนมากไปยังฐานข้อมูลว่างเปล่าและก่อนที่ฉันจะเริ่มฉันจะปิดการใช้งานดัชนีที่ไม่ใช่แบบคลัสเตอร์ที่ไม่ซ้ำกันทั้งหมดเพื่อดูว่าฉันสามารถปรับปรุงประสิทธิภาพของการนำเข้าได้หรือไม่ ตอนนี้ฉันต้องการเปิดใช้งานดัชนีอีกครั้งและฉันสงสัยว่ามีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อปรับให้เหมาะสมนี้ มีตารางมากกว่า 100 ตารางและดัชนีเกือบ 2,000 รายการที่จะสร้างใหม่ ฐานข้อมูลมีขนาด 200GB ส่วนสำคัญของสคริปต์ที่ฉันใช้คือ: declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild' from sys.indexes as i Inner Join sys.objects o On o.object_id = i.object_id Where o.is_ms_shipped = 0 And i.index_id >= …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.