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

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

1
Commit vs Fast Commit vs Commit Cleanout ในฐานข้อมูล Oracle
ฉันสงสัยว่ามีบางคนสามารถตรวจสอบความเข้าใจของฉันเกี่ยวกับความแตกต่างระหว่าง 3 คำเหล่านั้นเกี่ยวกับฐานข้อมูล Oracle หรือไม่ แหล่งข้อมูลหลายแห่งทำให้คำเหล่านี้สับสนและไม่อธิบายรายละเอียดดังนั้นจึงเป็นเรื่องยากที่จะค้นหาข้อมูล จากสิ่งที่ฉันรวบรวม: ความมุ่งมั่นและความมุ่งมั่นอย่างรวดเร็วเป็นสิ่งเดียวกันแน่นอนการกระทำทั้งหมดนั้นเป็นการกระทำที่รวดเร็ว การยอมรับอย่างรวดเร็วเป็นหลักเท่านั้นที่ปรับปรุงการตั้งค่าสถานะในตารางธุรกรรมของส่วนหัวของการเลิกทำ / ย้อนกลับเพื่อระบุว่าการทำธุรกรรมได้กระทำ อย่างไรก็ตามบล็อกที่เกิดขึ้นจริงจะไม่ได้รับการตรวจสอบอีกต่อไปซึ่งหมายความว่าที่อยู่การยกเลิกไบต์ (UBA) ในรายการธุรกรรมที่สนใจ (ITL) ซึ่งอยู่ในส่วนหัวของบล็อกข้อมูลยังคงชี้ไปที่ตารางธุรกรรมของกลุ่มการเลิกทำที่สอดคล้องกัน นอกจากนี้ไบต์ล็อคของแถวที่เกี่ยวข้องจะไม่ถูกปล่อยออกมาและจำนวนการล็อคใน ITL จะไม่เปลี่ยนแปลง (แถวยังคงล็อคอยู่) ในการคอมมิทการล้างข้อมูลบล็อกจะถูกตรวจทานอีกครั้งและ ITL ได้รับการอัพเดตด้วย commit SCN อย่างไรก็ตามจำนวนการล็อคใน ITL และล็อคไบต์ที่เก็บไว้ในแต่ละแถวยังคงไม่ได้รับการปรับปรุง (แถวยังคงล็อคเหมือนการกระทำที่รวดเร็ว) สิ่งนี้จะไม่สร้างการทำซ้ำแม้ว่าบล็อกจะเปลี่ยนไป บล็อกที่มีความมุ่งมั่นตามปกติ (== มุ่งมั่นอย่างรวดเร็ว) จะได้รับการล้างข้อมูลบล็อกล่าช้าเมื่อพวกเขาถูกแตะครั้งต่อไป (และสร้างการทำซ้ำ) บล็อกที่มีการกระทำการล้างข้อมูลจะได้รับการล้างข้อมูลบล็อกล่าช้าเมื่อมีการแตะครั้งถัดไป (และสร้างการทำซ้ำ) หวังว่าใครบางคนสามารถตรวจสอบคะแนนเหล่านี้! ขอบคุณ!

2
การลดการอ่านที่ทำดัชนีด้วยเกณฑ์ที่ซับซ้อน
ฉันกำลังปรับฐานข้อมูลตั๋วทำงาน Firebird 2.5 ให้เหมาะสม พวกมันถูกเก็บไว้ในตารางที่ประกาศเช่นนี้ CREATE TABLE TICKETS ( TICKET_ID id PRIMARY KEY, JOB_ID id, ACTION_ID id, STATUS str256 DEFAULT 'Pending' ); โดยทั่วไปฉันต้องการค้นหาตั๋วใบแรกที่ยังไม่ได้ดำเนินการและอยู่ในPendingสถานะ ลูปการประมวลผลของฉันจะเป็น: รับตั๋วที่ 1 Pending ทำงานกับ Ticket อัปเดตสถานะตั๋ว => Complete ทำซ้ำ ไม่มีอะไรแฟนซีเกินไป ถ้าฉันดูฐานข้อมูลในขณะที่การวนรอบนี้ทำงานฉันจะเห็นจำนวนการอ่านดัชนีที่จัดทำขึ้นสำหรับการทำซ้ำแต่ละครั้ง ดูเหมือนว่าประสิทธิภาพจะลดลงอย่างมากไม่ได้ แต่เครื่องที่ฉันทดสอบอยู่นั้นค่อนข้างเร็ว อย่างไรก็ตามฉันได้รับรายงานประสิทธิภาพการทำงานลดลงเมื่อเวลาผ่านไปจากผู้ใช้ของฉัน ฉันได้ดัชนีมาStatusแล้ว แต่ก็ยังดูเหมือนว่ามันจะทำการสแกนTicket_Idคอลัมน์แต่ละรอบซ้ำ ดูเหมือนว่าฉันจะมองอะไรบางอย่าง แต่ฉันไม่แน่ใจ จำนวนการปีนขึ้นของการอ่านดัชนีนั้นเป็นไปตามที่คาดการณ์ไว้หรือไม่ - แก้ไขความคิดเห็น - ใน Firebird คุณจะ จำกัด …

2
innodb_flush_method = O_DIRECT vs O_DSYNC ผลกระทบต่อประสิทธิภาพใน ext3 กับพาร์ติชันดิสก์ LVM
ในหนึ่งในสภาพแวดล้อมการผลิตของฉันเรามีสองอินสแตนซ์ที่ทำงานบนคลัสเตอร์ RedHat โดยมีหนึ่งอินสแตนซ์การผลิตที่เกี่ยวข้องกับคลัสเตอร์ เรามีหน่วยความจำหลัก 125G พร้อมพูลบัฟเฟอร์ InnoDB 24G ซึ่งครอบครองโดย instance1 & 12G ที่ครอบครองโดย instance2 ซึ่งไม่เกี่ยวข้องกับคลัสเตอร์ RedHat ทั้งข้อมูลและบันทึกธุรกรรมอยู่บนพาร์ติชั่นดิสก์ LVM พร้อมระบบไฟล์ ext3 สำหรับการเพิ่มประสิทธิภาพการทำงานที่ดีขึ้นและ I / O throughput ที่ฉันได้ตัดสินใจที่จะเปลี่ยนแปลงไปinnodb_flush_methodO_DIRECT อ้างอิงจากเอกสารของ MySQL: ที่ข้อมูล InnoDB และไฟล์เข้าสู่ระบบตั้งอยู่บน SAN จะได้รับพบว่าการตั้งค่าinnodb_flush_methodเพื่อO_DIRECTประสิทธิภาพสามารถลดง่ายSELECTงบโดยปัจจัยที่สาม หมายถึงการที่มีประสิทธิภาพสูง MySQL Ver 2 และ 3 มันบอกว่านักพัฒนา InnoDB innodb_flush_method=O_DSYNCพบข้อบกพร่องเกี่ยวกับการใช้ O_SYNCและO_DSYNCคล้ายกับfsync()และfdatasync(): O_SYNCซิงค์ทั้งข้อมูลและเมตาดาต้าในขณะที่O_DSYNCซิงค์ข้อมูลเท่านั้น ถ้านั่นดูเหมือนคำอธิบายมากมายโดยไม่มีคำแนะนำนี่คือคำแนะนำ: ถ้าคุณใช้ระบบปฏิบัติการยูนิกซ์เหมือนระบบปฏิบัติการและควบคุม RAID ของคุณมี writecache O_DIRECTแบตเตอรี่สำรองเราขอแนะนำให้คุณใช้ …

1
มิเรอร์ - ไม่สามารถเข้าถึงที่อยู่เครือข่ายเซิร์ฟเวอร์
ฉันติดตั้ง SQL Server 2008 R2 แล้ว มันมีสามกรณี ค่าเริ่มต้น (MSSQLServer) อินสแตนซ์แรก อินสแตนซ์ที่สอง ทั้งหมดนี้คือการเข้าสู่ระบบในฐานะบริการเครือข่าย .. ค่าเริ่มต้นอินสแตนซ์คือเซิร์ฟเวอร์หลักอินสแตนซ์แรกคือมิเรอร์ที่สองอินสแตนซ์คือเซิร์ฟเวอร์พยาน ตอนแรกฉันทำการสำรองข้อมูลทั้งหมดและสำรองข้อมูลธุรกรรมของฐานข้อมูลหลักของฉัน กู้คืนไปยังอินสแตนซ์แรกโดยการรักษาชื่อฐานข้อมูลและสถานะการกู้คืนเดียวกันคือไม่มีการกู้คืน ในที่สุดฉันเริ่ม Mirroring และฉันได้รับข้อความแสดงข้อผิดพลาดสองข้อความที่แสดงด้านล่าง

1
พฤติกรรมของ SQL Server TempDB ในสภาพแวดล้อมของหน่วยความจำขนาดใหญ่
การอ่านคำถามนี้ทำให้ฉันนึกถึงคำถามที่ฉันได้ซักพักหนึ่งแล้ว เรามี SQL Server ที่มี RAM ขนาด 512GB ฐานข้อมูลหลักคือ 450 GB เราเห็นการกระทำค่อนข้างมากใน TempDB (ตกลงฉันคิดว่ามันเป็น "การกระทำค่อนข้างมาก" - อาจไม่ได้!) ฉันติดตั้งเซิร์ฟเวอร์ตัวอย่างของ RamDisk Plus สร้าง ramdrive 50GB ชี้ไปที่ TempDB แล้วไม่เห็นการปรับปรุงประสิทธิภาพเลย การเขียนไปที่ TempDB มักจะส่งผลให้เกิดการเขียนทางกายภาพจริงไปยังดิสก์เสมอหรือเป็น TempDB ที่เขียนโดย SQL Server สำหรับการเขียนที่ล่าช้าเช่นในแคชของระบบไฟล์ Windows ramdisk ไม่มีจุดหมายในสถานการณ์นี้หรือไม่? ฉันรู้ว่า SQL Server 6.5 ได้รับการสนับสนุนสำหรับ TempDB-In-Ram แต่ฉันเห็นว่าเลิกใช้มานานแล้ว!

2
กำลังวางธุรกรรมเข้าสู่ระบบแยกปริมาณ [สถานะของแข็ง]?
บันทึกการทำธุรกรรมมักจะแยกในปริมาณที่แยกต่างหาก เหตุผลสำหรับการปฏิบัตินี้ตามที่ฉันเข้าใจคือข้อมูลบันทึกธุรกรรมถูกเขียนเรียงตามลำดับและฮาร์ดไดรฟ์สามารถดำเนินการเขียนด้วยความเร็วที่สูงกว่าตามลำดับเมื่อเทียบกับแบบสุ่ม นี่เป็นเพราะเข็มเล็ก ๆ ในไดรฟ์ซึ่งต้องเคลื่อนที่ในระยะทางที่สั้นกว่ามากเมื่อทำการเขียนบล็อกข้อมูลตามลำดับซึ่งต่างจากการเขียนแบบสุ่ม (ขออภัยสำหรับการตีความที่ไร้เดียงสาเพียงแค่พยายามเข้าใจสิ่งที่ฉันอ่าน) เมื่อคำนึงถึงสิ่งนี้ ... มันเกิดขึ้นกับฉันที่ไดรฟ์โซลิดสเตทไม่มีเข็มและจานรองเล็ก ๆ หากทั้งฐานข้อมูลและบันทึกธุรกรรมของฉันอยู่บนไดรฟ์โซลิดสเตท RAID 5 จากแปดตัวเดียวจะมีข้อดีที่จะย้ายบันทึกธุรกรรมไปยังโวลุ่มแยกต่างหากหรือไม่? หากการเพิ่มประสิทธิภาพที่คาดคะเนขึ้นอยู่กับข้อสรุปของการเขียนตามลำดับลดระยะทางที่เข็มเคลื่อนที่และจานหมุนและไดรฟ์โซลิดสเตตไม่มีชิ้นส่วนที่เคลื่อนไหวเหล่านี้ฉันจะได้อะไรจากการแยกบันทึก

2
เหตุใดแบบสอบถามนี้จึงไม่ใช้ดัชนีที่ไม่ได้เป็นคลัสเตอร์ของฉันและฉันจะสร้างมันได้อย่างไร
ตามมาถึงคำถามนี้เกี่ยวกับการเพิ่มประสิทธิภาพการค้นหาฉันต้องการทราบว่ามีวิธีในการทำให้ดัชนีของฉันถูกใช้เป็นค่าเริ่มต้นหรือไม่ แบบสอบถามนี้ทำงานในประมาณ 2.5 วินาที: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; อันนี้ทำงานในประมาณ 33ms: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' ORDER BY [DateEntered], [DeviceID]; มีดัชนีคลัสเตอร์ในฟิลด์ [ID] (pk) และมีดัชนีที่ไม่ใช่คลัสเตอร์ใน [DateEntered], [DeviceID] แบบสอบถามแรกใช้ดัชนีคลัสเตอร์แบบสอบถามที่สองใช้ดัชนีที่ไม่ใช่คลัสเตอร์ของฉัน คำถามของฉันคือสองส่วน: ทำไมเนื่องจากแบบสอบถามทั้งสองมีส่วนคำสั่ง WHERE ในฟิลด์ [DateEntered] เซิร์ฟเวอร์จึงใช้ดัชนีคลัสเตอร์ในครั้งแรก แต่ไม่ใช่อันดับที่สองหรือไม่ ฉันจะทำให้ดัชนีที่ไม่ใช่แบบคลัสเตอร์นั้นถูกใช้เป็นค่าเริ่มต้นในแบบสอบถามนี้ได้โดยไม่ต้องสั่งซื้อ (หรือเพราะเหตุใดฉันจึงไม่ต้องการพฤติกรรมนั้น)

4
เหตุผลที่ไม่ใช้หมายเลขที่ไม่มีค่าใน Oracle?
บริษัท ของเรากำลังติดต่อกับ บริษัท ซอฟต์แวร์อื่นสำหรับโครงการร่วมกันและเราได้รับแจ้งว่าหากไม่ควรแสดงค่าเฉพาะเราควรผ่านใน -5000 (ค่า Sentinel ตามอำเภอใจ) เหตุผลก็คือไม่มีคอลัมน์ตัวเลขในฐานข้อมูล Oracle ของพวกเขารองรับค่า Null ตามคำแนะนำของ Oracle Dev (ปัจจุบัน) ของพวกเขา บริษัท นี้ยังเขียนโค้ดส่วนใหญ่ของพวกเขาใน VB6 (ค่อยๆเปลี่ยนเป็น VB.NET ซึ่งเป็นอีกหัวข้อหนึ่งสำหรับอีกวันหนึ่ง ... ) จากความอยากรู้อย่างแท้จริงมีเหตุผลใดที่ถูกต้องสำหรับคำแนะนำนี้หรือไม่? ฉันไม่สามารถคิดถึงสิ่งใดในด้านของฉัน --- แก้ไข ขอบคุณสำหรับความคิดเห็นทั้งหมด ฉันโพสต์คำถามเดียวกันบน CodeProject.com ( ลิงก์ ) และได้รับคำติชมที่คล้ายกันมาก ดูเหมือนว่าจะมีเพียงครั้งเดียวที่เราจะสามารถพิสูจน์ได้ว่าการปฏิบัตินี้เกี่ยวข้องกับกุญแจต่างประเทศและฉันสามารถระบุได้ว่าไม่มีกุญแจต่างประเทศใด ๆ ในระบบ นักพัฒนาที่ทำตามข้อตกลงนี้ (ฉันเคยทำงานที่ บริษัท นั้น) มีประสบการณ์มากกว่าฉันอย่างมากดังนั้นฉันจึงต้องการตรวจสอบให้แน่ใจว่าไม่มีเหตุผลที่ถูกต้องสำหรับเรื่องนี้ก่อนที่จะทำการตรวจสอบ

3
เลือก DISTINCT ในหนึ่งคอลัมน์ขณะส่งคืนคอลัมน์อื่นหรือไม่
ฉันมีแบบสอบถามซึ่งใช้ตารางการค้นหาสามตารางเพื่อรับข้อมูลทั้งหมดที่ฉันต้องการ ฉันต้องมีDISTINCTค่าสำหรับหนึ่งคอลัมน์ แต่ฉันต้องการข้อมูลที่เหลือที่เกี่ยวข้องอีกด้วย รหัส SQL ของฉัน: SELECT acss_lookup.ID AS acss_lookupID, acss_lookup.product_lookupID AS acssproduct_lookupID, acss_lookup.region_lookupID AS acssregion_lookupID, acss_lookup.document_lookupID AS acssdocument_lookupID, product.ID AS product_ID, product.parent_productID AS productparent_product_ID, product.label AS product_label, product.displayheading AS product_displayheading, product.displayorder AS product_displayorder, product.display AS product_display, product.ignorenewupdate AS product_ignorenewupdate, product.directlink AS product_directlink, product.directlinkURL AS product_directlinkURL, product.shortdescription AS product_shortdescription, product.logo …

4
SQL Server 2012 กำลังวาง [วงเล็บ] ไว้รอบ ๆ ชื่อตารางและคอลัมน์
เมื่อคุณลากโฟลเดอร์คอลัมน์ไปยังหน้าต่างแก้ไขรายการทั้งหมดของคอลัมน์จะถูกเพิ่มโดยไม่มีวงเล็บ หากคุณลากคอลัมน์ทีละรายการพวกเขามีวงเล็บ อย่างไรก็ตามมีการปิดใช้งานหรือไม่ ฉันไม่สามารถหาอะไรในตัวเลือกและพวกเขาเป็นสิ่งที่ทำให้ไขว้เขว

2
อนุญาตให้ผู้ใช้ทำอะไรก็ได้ภายในสคีมาของเขาเอง แต่ไม่ต้องสร้างหรือวางสคีมาเอง
ฉันสร้างสคีมาใน SQL Azure และได้รับอนุญาตจากบทบาทฐานข้อมูลต่อไปนี้: CREATE ROLE myrole AUTHORIZATION dbo; EXEC sp_addrolemember 'myrole', 'myuser'; CREATE SCHEMA myschema AUTHORIZATION dbo; GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole; GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole; ผ่านการอนุญาตที่กำหนดไว้ข้างต้นmyuserสามารถสร้าง / วางสคีมาของเขาเองเพื่อที่จะเอาชนะปัญหาที่ฉันลองใช้สิทธิ์ ALTER ANY SCHEMA …

1
เหตุใด DELETE จึงช้ากว่า SELECT มากแล้วจึงลบตาม id
ฉันมีตาราง InnoDB ที่ค่อนข้างยุ่ง (200,000 แถวฉันเดาได้ว่ามีหลายสิบข้อความค้นหาต่อวินาที) เนื่องจากข้อผิดพลาดฉันได้รับ 14 แถวที่มีที่อยู่อีเมลไม่ถูกต้อง (เหมือนกัน) และต้องการลบทิ้ง ฉันลองDELETE FROM table WHERE email='invalid address'และได้รับ "เกินเวลารอการล็อค" หลังจากนั้นประมาณ 50 วินาที สิ่งนี้ไม่น่าประหลาดใจนักเนื่องจากคอลัมน์แถวไม่ได้จัดทำดัชนี อย่างไรก็ตามฉันทำSELECT id FROM table WHERE email='invalid address'และใช้เวลา 1.25 วินาที วิ่งDELETE FROM table WHERE id in (...)คัดลอกรหัสจากผลลัพธ์ SELECT ใช้เวลา 0.02 วินาที เกิดอะไรขึ้น? ใครสามารถอธิบายได้ว่าเหตุใด DELETE ที่มีเงื่อนไขจึงช้าลงจนหมดเวลา แต่การเลือก SELECT จากนั้นการลบด้วย id นั้นเร็วมาก …

3
ผลกระทบของการใช้ดัชนีที่ไม่ซ้ำกันที่ไม่ซ้ำกันพร้อมคอลัมน์ครอบคลุมแทนคีย์หลัก
เรามีตารางขนาดใหญ่[MyTable]ซึ่งปัจจุบันมีทั้งPrimary Key, และUnique Non Clustered Indexในคอลัมน์เดียวกัน ( [KeyColumn]) ดัชนี U NC ยังมีคอลัมน์ครอบคลุมเพิ่มเติม การมีทั้ง PK และดัชนี NC ที่ไม่ซ้ำกันในคอลัมน์เดียวกันดูเหมือนซ้ำซ้อนดังนั้นฉันจึงกำลังพิจารณาลบคีย์หลักและใช้ดัชนีที่ไม่ได้ทำคลัสเตอร์ที่ไม่ซ้ำกันเพื่อจุดประสงค์ในการอ้างอิงความสมบูรณ์ โปรดทราบว่าตารางจะทำคลัสเตอร์โดยคอลัมน์อื่นทั้งหมด ie ดังนั้นเรามี: ALTER TABLE [MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED ([KeyColumn]) GO และ CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex] ON [MyTable] ([KeyColumn]) INCLUDE ([Column1], [Column2]) GO เท่าที่ฉันรู้มันเป็นไปไม่ได้ที่จะเพิ่มคอลัมน์ครอบคลุมลงในคีย์หลักดังนั้นฉันตั้งใจจะทำ: ปล่อยข้อ จำกัด ของ Foreign Key …

3
SQL Server เก็บข้อมูลในคุณสมบัติกำหนดการงานอย่างไร
ฉันรู้ว่ามีSELECT * FROM msdb..sysjobschedulesแต่ที่เพิ่งแสดงให้เห็นในครั้งต่อไปที่งานมีกำหนดให้ทำงาน ฉันต้องการทราบว่าทั้งหมดนี้ถูกกำหนดและจัดเก็บอย่างไร ดังนั้นมันจะเก็บค่าของ Recurs ทุกวันจันทร์ที่ไหน
12 sql-server  t-sql  jobs 

1
คุณแสดง VIEWS ใน ERD อย่างไร
VIEWS (CREATE VIEW) แสดงใน ERD หรือไม่ ถ้าเป็นเช่นนั้นคุณจะเป็นตัวแทนของพวกเขาและระบุว่าพวกเขามาจากตารางอะไร?
12 view  erd 

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