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

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

3
Sleeping SPID บล็อกธุรกรรมอื่น ๆ
ฉันมีปัญหาในการติดตามการบล็อกที่เรากำลังประสบอยู่ รากปิดกั้นสถานะ SPID เป็น 'นอน' cmd คือ 'รอคำสั่ง' และเป็นsqltextSET TRANSACTION ISOLATION LEVEL READ COMMITTED เมื่อฉันดูรายงานยอดการทำธุรกรรมตามรายการธุรกรรมที่ถูกบล็อกคำสั่งการบล็อก SQL คือ '-' ฉันทำการติดตามบน SQL และเมื่อการบล็อคเกิดขึ้นการติดตามรูทการบล็อค SPID แต่มันไม่ได้นำฉันไปทุกที่ คำสั่งร่องรอยสุดท้ายคือเช่นเดียวกับข้างต้นsqltextSET TRANSACTION ISOLATION LEVEL READ COMMITTED ฉันได้ตรวจสอบขั้นตอนการจัดเก็บที่เกี่ยวข้องทั้งหมดแล้วฉันสามารถค้นหาเพื่อให้แน่ใจว่าพวกเขามีงบ TRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK งบ TRAN (เราใช้ขั้นตอนที่เก็บไว้สำหรับทุกสิ่งดังนั้นจึงไม่มีคำสั่งแบบสแตนด์อโลน) ปัญหานี้เพิ่งเริ่มเกิดขึ้นในช่วง 24 ชั่วโมงที่ผ่านมาและไม่มีใครอ้างว่าได้ทำการเปลี่ยนแปลงใด ๆ กับระบบ การแก้ไข: หนึ่งในขั้นตอนการจัดเก็บที่ใช้บ่อยของเรามีข้อผิดพลาดกับการแทรก …

2
วิธีหลีกเลี่ยงการใช้ตัวแปรในส่วนคำสั่ง WHERE
ได้รับขั้นตอนการจัดเก็บ (ง่าย) เช่นนี้: CREATE PROCEDURE WeeklyProc(@endDate DATE) AS BEGIN DECLARE @startDate DATE = DATEADD(DAY, -6, @endDate) SELECT -- Stuff FROM Sale WHERE SaleDate BETWEEN @startDate AND @endDate END หากSaleตารางมีขนาดใหญ่SELECTอาจใช้เวลาดำเนินการนานเนื่องจากเครื่องมือเพิ่มประสิทธิภาพไม่สามารถปรับให้เหมาะสมเนื่องจากตัวแปรท้องถิ่น เราทดสอบการใช้ชิ้นSELECTส่วนด้วยตัวแปรจากนั้นจึงกำหนดวันที่ฮาร์ดโค้ดและเวลาดำเนินการเริ่มจาก ~ 9 นาทีถึง ~ 1 วินาที เรามีขั้นตอนการจัดเก็บจำนวนมากที่ค้นหาตามช่วงวันที่ "คงที่" (สัปดาห์, เดือน, 8 สัปดาห์เป็นต้น) ดังนั้นพารามิเตอร์อินพุตเป็นเพียง @endDate และ @startDate จะถูกคำนวณภายในขั้นตอน คำถามคือวิธีปฏิบัติที่ดีที่สุดในการหลีกเลี่ยงตัวแปรในส่วนคำสั่ง WHERE เพื่อที่จะไม่ประนีประนอมกับเครื่องมือเพิ่มประสิทธิภาพคืออะไร? …

6
ค้นหาหมายเลขฟรี“ n” ติดต่อกันจากตาราง
ฉันมีตารางที่มีตัวเลขเช่นนี้ (สถานะเป็นได้ทั้งฟรีหรือถูกมอบหมาย) สถานะหมายเลข id_set ----------------------- 1 000001 ที่มอบหมาย 1 000002 ฟรี 1 000003 มอบหมาย 1 000004 ฟรี 1 000005 ฟรี 1 000006 มอบหมาย 1 000007 มอบหมาย 1 000008 ฟรี 1 000009 ฟรี 1 000010 ฟรี 1 000011 ได้รับมอบหมาย 1 000012 ได้รับมอบหมาย 1 000013 ได้รับมอบหมาย 1 000014 ฟรี 1 000015 ได้รับมอบหมาย …

1
การผลิตการจำลองแบบ PostgreSQL พร้อมหรือยัง
การจำลองแบบดั้งเดิมของ PostgreSQL เปรียบเทียบกับ MySQL อย่างไร ฉันรู้ว่าการจำลองแบบอะซิงโครนัสได้รับการสนับสนุนมานานกว่าการซิงค์ซึ่งเร็ว ๆ นี้ ซิงโครนัสน่าเชื่อถือที่จะใช้ในโครงการจริงหรือไม่?

2
หลายต่อหลายและอ่อนแอ
ฉันมีนิติบุคคลที่ไม่สามารถอยู่ได้โดยไม่ถูกกำหนดโดยอีกและฉันต้องการให้นิติบุคคลนี้มีส่วนร่วมในความสัมพันธ์แบบกลุ่มต่อกลุ่ม ตัวอย่าง: ศิลปินมีอัลบั้ม (อัลบั้มไม่มีอยู่โดยไม่มีศิลปิน) อัลบั้มมีหลายแทร็ก แต่แทร็กเดียวกันสามารถมีอยู่ได้ในหลายอัลบั้ม ดังนั้นเราจึงมีความสัมพันธ์แบบหลายต่อหลายคนระหว่างอัลบั้มและแทร็ก หากอัลบั้มเป็นเอนทิตีอ่อน ๆ คีย์หลักของมันคือคีย์ต่างประเทศที่อ้างอิงศิลปินดังนั้นจึงไม่สามารถเป็นคีย์ต่างประเทศไปยังตารางอื่นที่แสดงถึงความสัมพันธ์แบบหลายต่อหลายกลุ่ม คำถามคือ: เป็นไปได้หรือไม่ที่จะมีความสัมพันธ์เช่นนี้ใน SQL และหากเป็นเช่นนั้นฉันจะแสดงได้อย่างไร

1
ไม่นานหลังจากอัปเดตพารามิเตอร์ expire_logs_days และเริ่มต้น sql ใหม่ binlogs เก่าจะถูกลบอย่างไร
MySQL 5.1.x | InnoDB | ของ windows ไดเรกทอรีข้อมูล mysql ของฉันเริ่มเต็มไปด้วยบันทึกถังขยะ ขณะนี้ฉันมีการตั้งค่าต่อไปนี้ที่กำหนดค่าในเซิร์ฟเวอร์ windows mysql ของฉัน: [mysqld] log-bin server-id=1 binlog-do-db=foodb1 binlog-do-db=foodb2 expire_logs_days=25 ฉันวางแผนที่จะเปลี่ยนการตั้งค่า expire_logs_days เป็นexpire_logs_days=10และตีกลับบริการ mysql ไม่นานหลังจากทำการเปลี่ยนแปลงฉันสามารถคาดหวังได้ว่าถังขยะเก่าจะได้รับการล้าง นี่เป็นเพียงส่วนหนึ่งของงานที่ทำในตอนกลางคืนหรือไม่? หรือควรจะทันที

2
การปิด WAITFOR ที่ไม่ จำกัด เพิ่มขนาดไฟล์บันทึกหรือไม่
ในแอปรุ่นล่าสุดของฉันฉันเพิ่มคำสั่งที่บอกให้รอเมื่อมีบางสิ่งเข้ามาในคิว Service Broker: WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue) DBA บอกฉันว่าตั้งแต่การเพิ่มขนาดบันทึกได้ผ่านหลังคา สิ่งนี้ถูกต้องไหม หรือฉันควรจะมองหาที่อื่น?

2
ขนาด varchar มีความสำคัญในตารางชั่วคราวหรือไม่?
มีการถกเถียงกันว่างานของภรรยาผมเกี่ยวกับเพียงแค่ใช้varchar(255)กับทุกvarcharสาขาในตารางชั่วคราวในขั้นตอนการจัดเก็บ โดยพื้นฐานแล้วค่ายหนึ่งต้องการใช้ 255 เพราะจะใช้ได้ตลอดแม้ว่าการเปลี่ยนแปลงคำจำกัดความและค่ายอื่นต้องการติดกับขนาดในตารางต้นฉบับเพื่อปรับปรุงประสิทธิภาพที่เป็นไปได้ ค่ายแสดงถูกต้องหรือไม่? มีความหมายอื่นหรือไม่? พวกเขากำลังใช้ SQL Server

3
ขนาดหน่วยการจัดสรร SQL Server NTFS
ใน Windows 2008 R2 ที่เรียกใช้ SQL Server 2008 R2 วิธีที่สำคัญคือขนาดของหน่วยการจัดสรร NTFS ในประสิทธิภาพของ DISK IO สำหรับฉันแล้วผู้ดูแลเซิร์ฟเวอร์ที่สร้างเซิร์ฟเวอร์ไม่กี่แห่งสำหรับแอปที่มีภารกิจสำคัญเหลือขนาดหน่วยการจัดสรร NTFS (ขนาดคลัสเตอร์) ไปเป็นค่าเริ่มต้น 4 KB แทนที่จะเป็น 64 KB ติดตั้งเซิร์ฟเวอร์ SQL แล้ว การถอนการติดตั้ง SQL - ฟอร์แมตไดรฟ์ที่มีขนาดคลัสเตอร์ 64 KB และติดตั้งเซิร์ฟเวอร์ SQL ใหม่หรือไม่

2
การแคชดัชนี PostgreSQL
ฉันมีปัญหาในการค้นหาคำอธิบาย 'lay' ของวิธีการจัดทำดัชนีแคชใน PostgreSQL ดังนั้นฉันต้องการตรวจสอบความเป็นจริงของสมมติฐานเหล่านี้ทั้งหมดหรือทั้งหมด: ดัชนี PostgreSQL เช่นแถวอยู่บนดิสก์ แต่อาจถูกแคช ดัชนีอาจอยู่ในแคชทั้งหมดหรือไม่ทั้งหมด ไม่ว่าจะเป็นแคชหรือไม่ขึ้นอยู่กับความถี่ในการใช้งาน (ตามที่กำหนดโดยตัววางแผนคิวรี) ด้วยเหตุนี้ดัชนี 'สมเหตุสมผล' ส่วนใหญ่จึงจะอยู่ในแคชตลอดเวลา ดัชนีอยู่ในแคชเดียวกัน ( buffer cache?) เป็นแถวดังนั้นพื้นที่แคชที่ใช้โดยดัชนีจะไม่สามารถใช้ได้กับแถว แรงจูงใจของฉันสำหรับการทำความเข้าใจนี้ตามมาจากคำถามอื่นที่ฉันถามว่ามีข้อเสนอแนะว่าสามารถใช้ดัชนีบางส่วนในตารางซึ่งข้อมูลส่วนใหญ่จะไม่สามารถเข้าถึงได้ ก่อนดำเนินการนี้ฉันต้องการให้ชัดเจนว่าการใช้ดัชนีบางส่วนทำให้ได้เปรียบสองประการ: เราลดขนาดของดัชนีในแคชเพิ่มพื้นที่ว่างสำหรับแถวในแคช เราลดขนาดของ B-Tree ส่งผลให้เกิดการตอบแบบสอบถามที่รวดเร็วขึ้น

3
มีประโยชน์ใด ๆ ในการจัดเรียงข้อมูลดัชนี SQL ในสภาพแวดล้อม SAN หรือไม่?
เซิร์ฟเวอร์ SQL ของเราใช้งาน SAN มันมีฐานข้อมูล OLTP หลายสิบบางตัวมีหลายตารางที่มีมากกว่า 1m บันทึก เรารันสคริปต์บำรุงรักษาดัชนีของ Ola Hallengrenทุกสัปดาห์และทำงานเป็นเวลาหลายชั่วโมงในแต่ละครั้ง ขึ้นอยู่กับเกณฑ์การกระจายตัวของสคริปต์จะจัดระเบียบใหม่หรือดัชนีดัชนีใหม่ เราสังเกตว่าในระหว่างการทำดัชนีใหม่ไฟล์บันทึกจะมีขนาดใหญ่ซึ่งนำไปสู่การสิ้นเปลืองแบนด์วิธที่มากเกินไปในระหว่างการจัดส่งบันทึก จากนั้นบทความจาก Brent Ozar ซึ่งเขาบอกว่าจะหยุดกังวลเกี่ยวกับดัชนี SQL : ฮาร์ดไดรฟ์ของคุณแชร์กับเซิร์ฟเวอร์อื่น ๆ ที่กำลังส่งคำขอไดรฟ์ในเวลาเดียวกันดังนั้นไดรฟ์จะกระโดดไปทั่วเพื่อรับข้อมูล การดีแฟรกดัชนีของคุณเป็นงานยุ่งที่ไร้ความหมาย Googling คำถามนี้นำไปสู่ความคิดเห็นที่แตกต่างกันส่วนใหญ่สนับสนุนด้วยการขัดแย้งที่ดูเหมือนสั้นหรืออ่อนแอเกินไป แผนเบื้องต้นของเราคือการปรับเปลี่ยนเกณฑ์การแตกแฟรกเมนต์ในสคริปต์การบำรุงรักษาของเราเพื่อให้การจัดระเบียบใหม่บ่อยกว่าการจัดทำดัชนีใหม่ คำตัดสินสุดท้ายคืออะไร? มันคุ้มค่าหรือไม่ที่จะจัดเรียงดัชนี SQL บน SAN โดยพิจารณาภาระที่เกี่ยวข้องกับการรันงานบำรุงรักษารายสัปดาห์

3
SQL Server LocalDB อินสแตนซ์; ข้อผิดพลาดในการกู้คืนข้อมูลสำรอง (MasterDBPath ไม่พร้อมใช้งาน)
ฉันมี SQL Local 2012 Local DB ติดตั้งอยู่และกำลังเชื่อมต่อกับมันผ่าน (localdb) \ v11.0 เมื่อพยายามกู้คืนไฟล์ข้อมูลสำรองฉันจะได้รับ: TITLE: Microsoft SQL Server Management Studio MasterDBPath คุณสมบัติไม่พร้อมใช้งานสำหรับข้อมูล 'Microsoft.SqlServer.Management.Smo.Information' คุณสมบัตินี้อาจไม่มีอยู่สำหรับวัตถุนี้หรืออาจไม่สามารถเรียกคืนได้เนื่องจากสิทธิ์การเข้าถึงไม่เพียงพอ (Microsoft.SqlServer.Smo) สำหรับความช่วยเหลือคลิก: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.2100.60+((SQL11_RTM).120210-1846+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates .PropertyCannotBeRetrievedExceptionText & EvtID = MasterDBPath & LinkId = 20476 ฉันได้ลองตั้งค่าสตริงของ MasterDBPath ใน: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer\CurrentVersion` แต่สิ่งนี้ไม่ได้ช่วย ใครมีความคิดบ้าง
16 sql-server 

2
SQL Server - วิธีปฏิบัติที่ดีที่สุดสำหรับการเติบโตของไฟล์ฐานข้อมูล
ฉันเฝ้าสังเกตการเติบโตของไฟล์ผ่านตัวรวบรวมข้อมูลใน sql server 2008 r2 เป็นเวลาสองสัปดาห์ ฐานข้อมูลมีการเติบโตอย่างต่อเนื่องที่ประมาณ 35 (MB) / วัน ฐานข้อมูลยังไม่ถึงขนาดเริ่มต้นที่ 2 GB การเติบโตอัตโนมัติของไฟล์ฐานข้อมูลถูกตั้งไว้ที่ 5MB และฉันต้องการลองวิธีอื่นดังนั้นฉันจึงกำลังมองหาคำแนะนำและหรือความคิดเห็น มีงานปรับแต่งที่ทำงานทุกสัปดาห์ในคืนวันอาทิตย์เวลา 1:30 น. ภารกิจจะ: ตรวจสอบความสมบูรณ์ของฐานข้อมูล ย่อขนาดแฟ้มบันทึก - (ไม่เป็นไรเนื่องจากโหมดการบันทึกเป็นแบบง่าย) ลดขนาดฐานข้อมูล จัดระเบียบดัชนีใหม่ สร้างดัชนีใหม่ อัปเดตสถิติ ล้างประวัติ ฉันต้องการเพิ่มอีกสองขั้นตอนในแผนการปรับรายสัปดาห์: ขยายไฟล์ฐานข้อมูลขึ้น 500 MB หากพื้นที่ที่ใช้จนถึงขีด จำกัด หรือขนาดทั้งหมด ขยายไฟล์บันทึกเพิ่มขึ้น 250 MB (หลังการย่อขนาด) หากพื้นที่ที่ใช้จนถึงขีด จำกัด ขนาดทั้งหมด ด้วยการวางภาระการเติบโตในเวลาออฟไลน์ฉันหวังว่าจะได้รับประสิทธิภาพโดยการลดจำนวนกิจกรรมการเติบโตอัตโนมัติในช่วงที่มีงานหนัก ฉันมีคำถามสองข้อเกี่ยวกับไฟล์ที่กำลังเติบโตอัตโนมัติ สถานที่ที่ดีที่สุดที่จะนำขั้นตอนการเติบโตของไฟล์มาไว้ก่อนหน้าขั้นตอนปัจจุบันหรือหลังจากนั้น หากฉันใช้ALTER DATABASE|MODIFY FILEเพื่อขยายไฟล์ฉันจะทราบได้SpaceUsedInFile …

1
เหตุใดเซสชันของ Oracle ยังคงมีชีวิตอยู่หลังจากสองสัปดาห์ที่ไม่ได้ใช้งาน
ฐานข้อมูล: Oracle 10g O / S: Windows Server 2003 64 บิต ฉันค้นหารายการเซสชันของ Oracle ที่สร้างขึ้นโดยเว็บแอปพลิเคชัน (กรองโดย program = w3wp.exe) select * from V$session where UPPER(program) LIKE '%W3%' order by logon_time ตาม Logon_Time เหตุใดจึงยังคงมีเซสชันอยู่ตั้งแต่ 31/07/2012 หรือ 01/08/2012 หรือเซสชันใด ๆ ก่อนวันนี้ (21/8/2555) ฉันได้กำหนดค่าใน sqlnet.ora: SQLNET.EXPIRE_TIME = 20 ดังนั้นหมายความว่า Oracle ทุก ๆ 20 นาทีกำลังตรวจสอบว่าการเชื่อมต่อยังคงทำงานอยู่หรือไม่ …

2
ฉันสามารถคืนค่าไฟล์. bak ของ SQL Server ที่ไม่มี SQL Server ได้หรือไม่
ฉันมี.bakไฟล์ขนาดใหญ่จากการถ่ายโอนข้อมูล SQL Server 2005 ฉันสามารถกู้คืนสิ่งเหล่านี้ได้โดยไม่ต้องใช้ SQL Server ไม่ว่าจะเป็น PostgreSQL, MySQL หรือไฟล์แบบข้อความ โซลูชันโอเพนซอร์สจะมีประโยชน์มากที่สุด

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