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

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

3
อะไรจะหายไปเมื่อฉันสร้าง Foreign Key โดยใช้ "WITH NOCHECK"
ฉันรู้ว่าถ้าฉันEXISTS()โทรหาค่าการค้นหา FK ดังนั้นถ้าข้อ จำกัด FK นั้นเชื่อถือได้ผลลัพธ์จะเป็นทันที และถ้ามันไม่น่าเชื่อถือ (เช่นเมื่อฉันสร้าง FK โดยใช้WITH NOCHECK) แล้ว SQL Server จะต้องไปและตรวจสอบตารางเพื่อดูว่าค่านั้นมีจริง มีอะไรอีกบ้างที่ฉันแพ้โดยใช้NOCHECK?


1
วิธีตั้งค่ามุมมองที่จัดทำดัชนีไว้เมื่อเลือก TOP 1 ด้วย ORDER BY จากตารางที่แตกต่างกัน
ฉันกำลังพยายามติดตั้งมุมมองที่จัดทำดัชนีไว้ในสถานการณ์จำลองต่อไปนี้เพื่อให้แบบสอบถามต่อไปนี้ทำงานได้โดยไม่สแกนดัชนีคลัสเตอร์ เมื่อใดก็ตามที่ฉันสร้างมุมมองดัชนีสำหรับแบบสอบถามนี้แล้วใช้มันดูเหมือนว่าจะไม่สนใจดัชนีใด ๆ ที่ฉันวางไว้: -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++ SELECT TOP 1 * FROM dbo.TB_test1 t1 INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1 ORDER BY t1.somethingelse1 ,t2.somethingelse2; GO การตั้งค่าตารางมีดังนี้: สองตาราง พวกเขาจะเข้าร่วมโดยการเข้าร่วมภายในโดยแบบสอบถามด้านบน และเรียงลำดับโดยคอลัมน์จากคอลัมน์แรกจากนั้นคอลัมน์จากตารางที่สองโดยแบบสอบถามด้านบน เลือก TOP 1 เท่านั้น (ในสคริปต์ด้านล่างมีบางบรรทัดเพื่อสร้างข้อมูลทดสอบในกรณีที่ช่วยทำให้เกิดปัญหา) -- +++ TABLE SETUP +++ CREATE …

4
เป็นไปได้หรือไม่ที่จะพัฒนา SSIS ด้วย SQL Server Evaluation Version
เรากำลังคิดเกี่ยวกับการซื้อสำหรับการดำเนินการSQL Standard Server ETL via SSISเนื่องจากมันแพงมากสำหรับเราฉันต้องการทดสอบการพัฒนาแพ็คเกจ SSIS ในเวอร์ชันฟรี เนื่องจากรุ่นด่วนไม่รวม SSIS ฉันต้องการลองใช้กับการประเมินผล 180 เวอร์ชัน 2014 ของ SQL Server 2014 ที่หมดอายุแต่ไม่สามารถหาอะไรเกี่ยวกับ - Is it possible - Are there limitations. มีใครช่วยฉันที่นี่บ้าง
11 sql-server  ssis 

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

1
ล็อคใน Postgres สำหรับชุด UPDATE / INSERT
ฉันมีสองตาราง หนึ่งคือตารางบันทึก; อีกอันประกอบด้วยรหัสคูปองที่สามารถใช้ได้ครั้งเดียวเท่านั้น ผู้ใช้ต้องสามารถแลกคูปองซึ่งจะแทรกแถวลงในตารางบันทึกและทำเครื่องหมายคูปองที่ใช้ (โดยอัปเดตusedคอลัมน์เป็นtrue) โดยธรรมชาติมีปัญหาสภาพการแข่งขัน / ความปลอดภัยที่เห็นได้ชัดที่นี่ ฉันเคยทำสิ่งที่คล้ายกันในอดีตในโลกของ mySQL ในโลกนั้นฉันจะล็อกทั้งสองตารางทั่วโลกทำตรรกะให้ปลอดภัยด้วยความรู้ที่ว่าสิ่งนี้จะเกิดขึ้นได้ครั้งละครั้งแล้วปลดล็อกตารางเมื่อฉันทำเสร็จแล้ว Postgres มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่? โดยเฉพาะอย่างยิ่งฉันกังวลว่าการล็อกนั้นเป็นแบบโกลบอล แต่ไม่จำเป็นต้องเป็น - ฉันแค่ต้องทำให้แน่ใจว่าไม่มีใครพยายามป้อนรหัสนั้นดังนั้นบางทีการล็อกระดับแถวอาจจะใช้งานได้

1
กรณีที่สงสัยของ HADR_SYNC_COMMIT รออยู่
เรากำลังสังเกตเห็นรูปแบบที่น่าสนใจสำหรับการHADR_SYNC_COMMITรอคอยในสภาพแวดล้อมของเรา เรามีแบบจำลองสามแบบ หนึ่งหลักรองหนึ่งซิงค์รองและหนึ่ง async รองในดาต้าเซ็นเตอร์และเราเพิ่งเพิ่มแบบจำลองASYNCอีกสามรายการในดาต้าเซ็นเตอร์อีกอัน (ห่างกันประมาณ 2400 ไมล์) นับตั้งแต่เราเริ่มสังเกตเห็นการเพิ่มขึ้นอย่างมากของการHADR_SYNC_COMMITรอคอย เมื่อเราดูเซสชันที่ใช้งานอยู่เราจะเห็นCOMMIT TRANSACTIONข้อความค้นหามากมายที่รอการจำลอง SYNC จากภาพหน้าจอเราสามารถเห็นได้อย่างชัดเจนว่ามีการHADR_SYNC_COMMITรอคอยในวันที่ 29 มิถุนายนและในที่สุดเราก็ลดลง 'สอง' ของสาม async แบบจำลองในดาต้าเซ็นเตอร์ระยะไกลในช่วงเที่ยงวันที่ 1 กรกฎาคม ที่ลดลงเวลารออย่างมากพร้อมกับมัน สิ่งที่เราตรวจสอบแล้ว - บันทึกการส่งคิว, ทำซ้ำคิว, เวลาเพิ่มความแข็งครั้งล่าสุดและเวลาส่งมอบครั้งสุดท้ายบนเรพลิคาระยะไกล เรามีธุรกรรมเล็ก ๆ ต่อเนื่องในช่วงเวลาทำการดังนั้นคิวการส่งจึงค่อนข้างเล็กในเวลาที่กำหนด (ที่ใดก็ได้ระหว่าง 60KB และ 1MB) รีโมตรีโมตเกือบจะซิงค์กันแล้วมีความแตกต่างกันเล็กน้อยระหว่างเวลาการส่งข้อมูลครั้งล่าสุดและเวลาการทำให้แข็งครั้งสุดท้ายสำหรับบุคคลใด ๆ ในแบบจำลอง ไพพ์เน็ตเวิร์กคือ 10G และเราปรับเปลี่ยนขนาดบัฟเฟอร์การส่งจาก 256 megs เป็น 2 gigs ซึ่งสร้างขึ้นภายใต้สมมติฐานว่าเน็ตเวิร์กวางแพ็กเก็ตและส่งสัญญาณอีกครั้ง วิธีที่ดูเหมือนจะไม่ช่วยมากทั้ง ดังนั้นฉันสงสัยว่าแบบจำลองASYNCเกี่ยวข้องกับการHADR_SYNC_COMMITรอคอยอย่างไร แบบจำลองSYNCไม่ควรขึ้นอยู่กับการรอประเภทนี้เพียงลำพังฉันหายไปไหน

2
เลือกเฉพาะระเบียนที่มีค่าแตกต่างกัน / หลายค่าสำหรับคอลัมน์ใดคอลัมน์หนึ่ง
ด้านล่างเป็นตัวอย่างของตารางสมาชิกของฉัน มีบางระเบียนที่มีค่าหลายค่าในฟิลด์อีเมล ฉันต้องการเลือกระเบียนที่มีค่าอีเมลหลายค่าเท่านั้น: ตารางสมาชิก ID LASTNAME FIRSTNAME EMAIL 567 Jones Carol carolj@gmail.com 567 Jones Carol caroljones@aol.com 678 Black Ted tedblack@gmail.com 908 Roberts Cole coleroberts@gmail.com 908 Roberts Cole coler@aol.com 908 Roberts Cole colerobersc@hotmail.com ฉันต้องการผลลัพธ์ที่ได้คือ: 567 Jones Carol carolj@gmail.com 567 Jones Carol caroljones@aol.com 908 Roberts Cole coleroberts@gmail.com 908 Roberts Cole coler@aol.com 908 …
11 select  count  distinct 

3
ค้นหาตัวตนของลูกค้าที่เริ่มสืบค้นใน SQL Server โดยไม่ใช้ทริกเกอร์หรือไม่
ขณะนี้ฉันใช้Change Data Capture (CDC)เพื่อติดตามการเปลี่ยนแปลงข้อมูลและฉันต้องการติดตามชื่อโฮสต์และที่อยู่ IP ของลูกค้าที่ส่งการสอบถามที่ทำการเปลี่ยนแปลง หากมีลูกค้าที่แตกต่างกัน 5 คนลงชื่อเข้าใช้ด้วยชื่อผู้ใช้เดียวกันคนหนึ่งเผชิญกับปัญหาในการติดตามซึ่งหนึ่งในห้านั้นทำการสืบค้น โซลูชันที่กว้างขวางอื่น ๆ ที่ฉันพบรวมถึงการแก้ไขตาราง CDC ด้วยคำสั่งต่อไปนี้: ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) อย่างไรก็ตามสิ่งนี้จะส่งคืนชื่อโฮสต์ของเซิร์ฟเวอร์ที่เปิดใช้งานการสืบค้นไม่ใช่ชื่อโฮสต์ของไคลเอนต์ที่เปิดใช้งานการสอบถาม มีวิธีแก้ไขปัญหานี้หรือไม่? สิ่งที่จะช่วยในการบันทึกชื่อโฮสต์หรือที่อยู่ IP (หรือเอกลักษณ์เฉพาะอื่น ๆ ) ของลูกค้า ฉันไม่ต้องการใช้ทริกเกอร์เนื่องจากมันทำให้ระบบช้าลง CDC ก็สร้างตารางระบบดังนั้นจึงมีทริกเกอร์ที่ไม่สามารถทำได้


2
การประมาณค่า SARG cardinality ทำไมไม่สแกนแบบเต็ม?
เหตุใดจึงไม่มีการสแกนเต็มรูปแบบ (ใน SQL 2008 R2 และ 2012) ข้อมูลการทดสอบ: DROP TABLE dbo.TestTable GO CREATE TABLE dbo.TestTable ( TestTableID INT IDENTITY PRIMARY KEY, VeryRandomText VarChar(50), VeryRandomText2 VarChar(50) ) Go Set NoCount ON Declare @i int Set @i = 0 While @i < 10000 Begin Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2) Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 …

2
ทริกเกอร์ FOR FOR EACH STATEMENT จะเรียกใช้งานบ่อยแค่ไหนหากการดำเนินการเกิดจากข้อ จำกัด FK ที่มี CASCADE UPDATE
ผมเข้าใจว่าทริกเกอร์บนเสื้อตารางที่กำหนดไว้กับจะทำงานเมื่อตอนที่ผมดำเนินการFOR EACH STATEMENTUPDATE t ... ทีนี้เมื่อtถูกกำหนดด้วยFOREIGN KEY ... REFERENCES a ... ON UPDATE CASCADEและฉันอัพเดทแถว N แถวaนั่นจะทำให้ทริกเกอร์ถูกเรียกครั้งเดียวหรือครั้ง N หรือไม่? สิ่งที่แตกต่างกันคือการเปลี่ยนแปลงในตารางที่เรียงซ้อนกันโดยข้อ จำกัด FK เป็นแบบเดี่ยวUPDATEมากกว่าหรือมากกว่าแบบอนุกรมUPDATEหรือไม่?

1
การเปรียบเทียบ Schema SSDT ไม่ทำงานในขณะที่ BULK INSERT กำลังดำเนินการอยู่
ฉันกำลังทำงานในโครงการ ETL และ DW ขนาดใหญ่ที่เราใช้ TFS / แหล่งควบคุมร่วมกับทั้ง SSIS และ SSDT วันนี้ฉันค้นพบว่าในขณะที่แพคเกจ SSIS กำลังทำ BULK INSERT ในตารางฐานข้อมูลเป็นไปไม่ได้ที่จะทำการเปรียบเทียบ SSDT Schema กับฐานข้อมูลนั้น นี่เป็นสิ่งที่โชคไม่ดีเนื่องจากแพ็คเกจบางรายการของเราใช้เวลาค่อนข้างนานในการดำเนินการให้เสร็จสมบูรณ์ เราต้องการใช้ฟังก์ชั่น Schema Compare เพื่อตรวจจับการเปลี่ยนแปลงโครงสร้างฐานข้อมูลเพื่อบันทึกไว้ในโครงการ SSDT ของเราสำหรับการควบคุมเวอร์ชันของฐานข้อมูล เมื่อดูเพิ่มเติมเล็กน้อยฉันพบว่าฟังก์ชัน Schema Compare ใน SSDT เรียกใช้งานสคริปต์ SQL ที่เรียกใช้OBJECTPROPERTY()ฟังก์ชันระบบบนตารางในฐานข้อมูล โดยเฉพาะอย่างยิ่งในกรณีของฉันการโทรใด ๆ ที่OBJECTPROPERTY(<object_id>, N'IsEncrypted')ดูเหมือนว่าจะถูกบล็อกเมื่อ<object_id>อ้างถึงตารางที่กำลังถูกแทรกจำนวนมากในปัจจุบัน ใน Visual Studio นั้น SSDT Schema เปรียบเทียบจะหมดเวลาเพียงครู่เดียวและอ้างว่าไม่มีการตรวจพบความแตกต่าง มีวิธีแก้ไขปัญหานี้ใน SSDT หรือฉันควรลองรายงานข้อผิดพลาด MS …
11 sql-server  ssis  ssdt 

1
ตรวจสอบรุ่นและรุ่นของ SQL Server จากการตั้งค่าที่มีอยู่ก่อนติดตั้งจริงหรือไม่
เรากำลังจะทำการปรับลดรุ่นจาก SQL Server 2008 R2 Enterprise เป็น Standard Edition เพื่อเริ่มกิจกรรมข้างต้นเรากำลังมองหา Standard Edition ของ SQL Server ที่มีอยู่ เราพบหนึ่ง แต่สับสนในจุดด้านล่าง: ไฟล์ติดตั้ง (บันทึกโดยสมาชิกในทีมก่อนหน้า) อยู่ในโฟลเดอร์ที่ระบุว่าเป็น SQL Server 2008 R2 แต่เพื่อข้ามการตรวจสอบก่อนที่เราจะเริ่มการติดตั้งเราผ่านไฟล์default.iniซึ่งระบุว่า: SQLSERVER2008 Configuration File [SQLSERVER2008] สิ่งนี้สร้างข้อสงสัยว่านี่เป็น SQL Server รุ่นที่ถูกต้องหรือไม่ ดังนั้นมีวิธีอื่นในกรณีที่กล่าวถึงวิธีการดังกล่าวไม่ถูกต้องเพื่อตรวจสอบรุ่นก่อนที่เราจริงไปข้างหน้าและลองติดตั้ง? เราสามารถตรวจสอบรุ่นของ SQL Server ที่มีอยู่ได้เพราะในการตั้งค่าเราแทบจะไม่สามารถทราบได้ว่าเป็น Standard Edition จริงหรือไม่ เราไม่สามารถดาวน์โหลดสื่อใหม่ตามนโยบายความปลอดภัยของเรา นอกจากนี้เราไม่มีสิทธิ์ในการดาวน์โหลด

2
แนวความคิด ERD หลายโต๊ะหลายคนหรืออาจจะวนซ้ำ?
ฉันกำลังสร้างไดอะแกรมเชิงแนวคิด [ใช่ฉันรู้ว่าฉันได้รวมคุณลักษณะและปุ่ม - แต่นี่เป็นเพียงสำหรับฉันที่จะรวมสิ่งที่ฉันทำในขณะที่เรียนรู้] - ดังนั้นโปรดรักษามันเป็นแนวคิดด้วยการมุ่งเน้นที่ความสัมพันธ์และ ตารางและไม่ใช่วิธีไดอะแกรม;) สิ่งกีดขวางในใจของฉันคือ: ฉันพยายามที่จะหาวิธีที่ดีที่สุดในการสร้างแบบจำลองความสัมพันธ์ส่วนตัวที่ตั้งและองค์กร ก่อนอื่นกฎ: หนึ่งหรือมากกว่าส่วนตัว 's สามารถเป็นสมาชิก / เพื่อนของหนึ่งหรือมากกว่าองค์กร ; และในทางกลับกัน. โปรไฟล์อย่างน้อยหนึ่งรายการสามารถเป็นสมาชิก / เพื่อนของโปรไฟล์อื่น ๆ องค์กรอย่างน้อยหนึ่งแห่งสามารถเป็นสมาชิก / เพื่อนขององค์กรอื่น ๆ ได้ เพื่อนและสมาชิกแตกต่างกันในการที่เพื่อนเป็นแบบอ่านอย่างเดียวและสมาชิก [ขึ้นอยู่กับระดับ] สามารถเข้าถึงสิ่งที่แก้ไขได้อย่างเต็มที่ เพื่อให้สิ่งต่าง ๆ ซับซ้อนขึ้นสถานที่ตั้งมีกฎการรีฟิล "เพิ่มเติม" ของตนเองเช่นองค์กรที่เป็นเจ้าของสองสถานที่แต่ขึ้นอยู่กับกฎที่ตั้งสมาชิก [ โปรไฟล์ ] ขององค์กรนั้นอาจเข้าถึงได้อย่างเต็มที่ในที่เดียว แต่ จำกัด การเข้าถึงที่ อื่น ๆ [ขออภัย: คุณมักจะต้องเปิดภาพในหน้าต่างอื่นเพื่อดูขนาดที่ดีขึ้น] ดังนั้นอย่างที่คุณเห็นแนวคิดของโปรไฟล์และองค์กรนั้นเหมือนกันเช่นเดียวกับแนวคิดที่ยังไม่ได้เป็นแบบอย่างของเพื่อนและสมาชิก [... ซึ่งฉันคิดว่าจะได้รับการจัดการเหมือนตารางตัวกลางปัจจุบันที่มีการตั้งค่าเจ้าของ / ผู้ดูแลระบบ …

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