คำถามติดแท็ก sql-server

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

1
รายการที่ชัดเจนของขั้นตอนสำหรับการทดสอบพื้นฐานของ SQL Server?
ก่อนเรียกใช้การทดสอบประสิทธิภาพ / พื้นฐานสำหรับแอปที่ใช้ SQL Server ฉันต้องการให้สามารถตั้งค่าอินสแตนซ์เป็นสถานะ "ใหม่ทั้งหมด" โดยไม่ต้องเริ่มต้นอินสแตนซ์ใหม่ มีขั้นตอนที่ฉันมักจะทำตาม แต่ฉันต้องการสร้างรายการที่ชัดเจนที่อยู่ในลำดับที่ถูกต้องและไม่มีขั้นตอนซ้ำซ้อน รายการขั้นตอนนี้ทำให้การตั้งค่า SQL Server เป็นสถานะ "สะอาด" หรือไม่ ลำดับลอจิก / ถูกต้องหรือไม่? มีขั้นตอนที่ซ้ำซ้อนหรือไม่? CHECKPOINT -- Write all dirty pages DBCC DROPCLEANBUFFERS -- All should be clean after checkpoint? DBCC FREEPROCCACHE -- Clear the plan cache DBCC FREESYSTEMCACHE -- Is this necessary after FREEPROCCACHE? …

2
อะไรคือความแตกต่างระหว่างการทำมิเรอร์และการทำคลัสเตอร์ที่ล้มเหลวและแต่ละอันที่แนะนำกัน
อะไรคือความแตกต่างที่สำคัญระหว่างการทำมิเรอร์และการเฟลโอเวอร์คลัสเตอร์? ปัญหาประเภทใดที่แต่ละคนแก้ไขได้และในสถานการณ์แบบใดที่แต่ละคนได้รับการแนะนำในอีกสถานการณ์หนึ่ง

6
SQL Server รันคิวรีแบบขนานหรือไม่
SQL Server รันคิวรีแบบขนานหรือไม่ กล่าวอีกนัยหนึ่งถ้าฉันเรียกใช้การสืบค้นที่หนักที่ใช้เวลา 10 วินาทีในการดำเนินการและในเวลาเดียวกันเริ่มการสอบถามหนักอื่นที่ใช้เวลา 10 วินาทีแบบสอบถามที่สองจะเริ่มจริงหลังจาก 10 วินาทีหรือพวกเขาจะเริ่มทั้งสองในเวลาเดียวกัน ?
10 sql-server 

3
ฉันจะหาฐานข้อมูลตัวอย่างสำหรับ MySQL, SQL Server และ Oracle ได้จากที่ใด
ฉันต้องการทดลองกับระบบการจัดการฐานข้อมูลขนาดใหญ่ 3 ระบบ เพื่อจุดประสงค์นี้มันจะเจ๋งที่มีฐานข้อมูลเดียวกัน (ตารางเดียวกันและอื่น ๆ ) สำหรับแต่ละฐานข้อมูล ฉันจะหาสคริปต์ sql ที่สร้างฐานข้อมูลทดสอบที่เหมือนกันสำหรับ MySQL, MSSQL และ Oracle ได้อย่างไร

3
การรักษาตัวอักษรอาหรับบางตัวเหมือนกัน
ในภาษาอาหรับเรามีอักขระเช่นا (alef) และأ (alef with hamza) ผู้ใช้เขียนพวกเขาแทนกันและเราต้องการค้นหาพวกเขาสลับกันได้ SQL Server ถือว่าเป็นอักขระแยกต่างหาก ฉันจะทำให้ SQL ปฏิบัติต่อพวกเขาในลักษณะเดียวกันได้อย่างไร? ฉันคิดว่าจะแทนที่أ (alef กับ hamza) ด้วยا (alef) ที่ใส่เข้าไป แต่เรามีทางเลือกมากมายในภาษาอาหรับไม่ใช่แค่แค่ا (alef) และأ (alef กับ hamza) ฉันพยายามArabic_CI_ASแล้วArabic_CI_AIแต่นั่นก็ไม่ได้แก้ปัญหา นี่คือสคริปต์ในการสร้างปัญหาใหม่: CREATE TABLE [dbo].[TestTable] ( [ArabicChars] [nvarchar](50) NOT NULL, CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ( [ArabicChars] ASC ) ) ON [PRIMARY]; INSERT INTO …

6
เชื่อมต่อเซิร์ฟเวอร์มิเรอร์ SQL Server 2008 R2 อีกครั้ง
เซิร์ฟเวอร์ failover มีสถานะ (Mirror, Disconnected, In recovery) และเซิร์ฟเวอร์หลักมีสถานะ (Principal, Disconnected) กระบวนการเชื่อมต่อเซิร์ฟเวอร์เหล่านี้ใหม่เป็นอย่างไร

2
SQL Server กำหนดลำดับการล็อคในขณะที่เลือกตารางได้อย่างไร
ฉันมีสองโพรซีเดอร์ที่เก็บไว้ซึ่งหยุดชะงักเมื่อระบบอยู่ระหว่างการโหลด Proc A กำลังเลือกจากตารางในขณะที่ Proc B กำลังแทรกลงในตารางเดียวกัน กราฟล็อคแสดงว่า Proc A มีการล็อกหน้าโหมด S ที่ Proc B ต้องการล็อคโหมด IX สำหรับ Proc A อย่างไรก็ตามกำลังรอการล็อกหน้าโหมด S สำหรับหน้าอื่นที่ Proc B มีการล็อกหน้าโหมด IX แล้ว . เห็นได้ชัดว่าสามารถแยกออกได้ด้วยการทำให้แน่ใจว่าทั้งคิวรีล็อคหน้าในตารางในลำดับเดียวกัน แต่ฉันไม่สามารถหาวิธีที่จะทำ คำถามของฉันคือSQL Server จะกำหนดลำดับที่จะล็อคหน้าในขณะที่ทำ INSERTs และ SELECT และวิธีที่คุณสามารถปรับเปลี่ยนพฤติกรรมนี้ได้อย่างไร

2
Shared Lock ออกเมื่อ IsolationLevel.ReadUncommitted
ฉันอ่านว่าถ้าฉันใช้ IsolationLevel.ReadUncommitted แบบสอบถามไม่ควรออกล็อคใด ๆ อย่างไรก็ตามเมื่อฉันทดสอบสิ่งนี้ฉันเห็นล็อคต่อไปนี้: Resource_Type: HOBT Request_Mode: S (แชร์แล้ว) ล็อค HOBT คืออะไร มีอะไรเกี่ยวข้องกับ HBT (ฮีปหรือล็อคแบบทรีไบนารี) ทำไมฉันยังคงได้ล็อค S ฉันจะหลีกเลี่ยงการล็อคที่ใช้ร่วมกันได้อย่างไรเมื่อทำการสอบถามโดยไม่เปิดตัวเลือกสแนปชอตระดับการแยก ฉันกำลังทดสอบสิ่งนี้ใน SQLServer 2008 และตัวเลือกสแนปชอตตั้งเป็นปิด แบบสอบถามจะทำการเลือกเท่านั้น ฉันเห็นว่าจำเป็นต้องใช้ Sch-S แม้ว่า SQL Server จะไม่แสดงในแบบสอบถามที่ล็อคอยู่ ทำไมมันถึงยังมีการล็อคที่ใช้ร่วมกันอยู่? ตาม: ระดับการแยกธุรกรรม SET (Transact-SQL) ธุรกรรมที่รันที่READ UNCOMMITTEDระดับจะไม่ออกการล็อกที่ใช้ร่วมกันเพื่อป้องกันไม่ให้ธุรกรรมอื่นแก้ไขข้อมูลที่อ่านโดยธุรกรรมปัจจุบัน ดังนั้นฉันสับสนเล็กน้อย

3
การออกแบบคลังข้อมูล: มิติเวลาวันที่แบบรวมเทียบกับมิติและวันและเวลาที่แยกจากกัน
เราเพิ่งเริ่มออกแบบคลังข้อมูลใหม่และเราพยายามออกแบบวิธีการทำงานของวันที่และเวลา เราต้องสามารถรองรับหลายเขตเวลา (อาจอย่างน้อย GMT, IST, PST และ EST) ตอนแรกเราคิดว่าเราจะมีมิติเวลาวันที่ที่รวมกันกว้างลงไปจนถึง 15 นาทีอย่างละเอียดด้วยวิธีนี้เรามีหนึ่งคีย์ในตารางข้อเท็จจริงของเราและข้อมูลวันที่ที่แตกต่างกันทั้งหมดสำหรับเขตเวลาที่สนับสนุนทั้งหมดอยู่ในตารางมิติหนึ่ง (เช่นรหัสวันที่, วันที่ GMT, เวลา GMT, วันที่ IST, เวลา IST, ฯลฯ ... ) Kimball แนะนำให้มีการแยกมิติวันจากช่วงเวลาของวันเพื่อป้องกันไม่ให้ตารางขยายตัวใหญ่เกินไป (ชุดเครื่องมือคลังข้อมูลหน้า 240) ซึ่งฟังดูดี แต่นั่นหมายความว่าเรามีสองปุ่มในตารางความเป็นจริงสำหรับแต่ละเขตเวลา เราต้องการการสนับสนุน (หนึ่งสำหรับวันที่และหนึ่งสำหรับช่วงเวลาของวัน) เนื่องจากฉันไม่มีประสบการณ์มากในพื้นที่นี้ฉันหวังว่าจะมีใครบางคนรู้ว่าการแลกเปลี่ยนระหว่างสองวิธีคือประสิทธิภาพและการจัดการของคีย์โซนเวลาที่แตกต่างกันทั้งหมด อาจมีวิธีอื่นด้วยเช่นกันฉันเคยเห็นบางคนกำลังพูดถึงการแยกแถวในตารางความเป็นจริงต่อเขตเวลา แต่ดูเหมือนว่าจะมีปัญหาหากคุณข้อเท็จจริงว่าตารางมีจำนวนหลายล้านแถวคุณต้องเพิ่มสี่เท่าเพื่อเพิ่มเขตเวลา . ถ้าเราทำธัญพืช 15 นาทีเราจะมีแถว 131,400 (24 * 15 * 365) ต่อปีในตารางมิติเวลาวันที่ซึ่งไม่ฟังดูน่าเกลียดเกินไปสำหรับการแสดง แต่เราไม่รู้แน่ชัดจนกระทั่งเราทดสอบบางอย่าง แบบสอบถามต้นแบบ ข้อกังวลอื่น ๆ เกี่ยวกับการมีคีย์โซนเวลาแยกต่างหากในตารางข้อเท็จจริงคือแบบสอบถามต้องเข้าร่วมตารางมิติกับคอลัมน์อื่นตามเขตเวลาที่ต้องการบางทีนี่อาจเป็นสิ่งที่ …

4
การแบ่งพาร์ติชันเซิร์ฟเวอร์ SQL - สิ่งที่ต้องใช้สำหรับพาร์ติชันคีย์?
ฉันไม่เคยทำงานกับการแบ่งพาร์ติชันของเซิร์ฟเวอร์ SQL แต่ขณะนี้ฉันต้องเผชิญกับการออกแบบฐานข้อมูลซึ่งอาจรับประกันไดรฟ์ ระบบนี้ใช้สำหรับคูปอง คูปองจะออกเป็นระยะโดยปกติทุก ๆ หกสัปดาห์แม้ว่าจะมีการออกโฆษณาแบบเฉพาะกิจเช่นสำหรับกิจกรรมพิเศษ มีลูกค้า 15 ล้านคนและสำหรับการออกแต่ละครั้งลูกค้าทุกคนจะได้รับคูปอง 6 ประเภทที่แตกต่างกันโดยมีคูปองรวม 90 ล้านใบ เราจำเป็นต้องติดตามข้อมูลการแลกรับอินสแตนซ์คูปองและเก็บรักษาไว้เป็นเวลา 6 เดือนถึงแม้ว่าโดยทั่วไปแล้วคูปองจะใช้ได้เพียงหกสัปดาห์เท่านั้น คำขอแลกรางวัลใด ๆ สำหรับคูปองที่ไม่ถูกต้องจะไม่สามารถเข้าถึงฐานข้อมูลได้เพราะจะทำการตรวจสอบโดย POS จนถึง ในช่วงเวลาหกเดือนเราจะต้องเก็บแถวได้ 360 ล้านแถวในตารางอินสแตนซ์คูปองและมากถึง 72 ล้านแถว (สมมติว่ามีอัตราการไถ่ถอนสูงสุด 20%) ในตารางแลกซื้อ ฉันรู้สึกว่าตัวเลขเหล่านี้ใหญ่เกินไปสำหรับพาร์ติชันเดียวหรือไม่ คำถามของฉันคืออะไรใช้เป็นคีย์พาร์ติชัน หนึ่งในผู้สมัครที่เห็นได้ชัดคือการออกงานโดยให้พาร์ทิชั่นประมาณ 6 ครั้ง แต่ฉันคิดว่าอาจเป็นไปได้ว่าขนาดพาร์ทิชันที่ใหญ่เกินไปที่จะให้มีประสิทธิภาพสูงสุด? มันจะเป็นไปได้ที่จะแบ่งพาร์ติชันด้วยสองปุ่มเช่นโดยการออกอีเวนต์ + ตัวเลขสุดท้ายของรหัสลูกค้าหรือไม่ ดังนั้นตรรกะจะเป็น: If issuance event = 1 and last digit of customer …

3
การบันทึกทุกการเปลี่ยนแปลงของแถวในฐานข้อมูลนั้นถูกเก็บไว้อย่างไร?
ในโครงการที่ฉันกำลังดำเนินการการเปลี่ยนแปลงแถวในบางตารางของฐานข้อมูลต้องถูกติดตามเพื่อการตรวจสอบเพิ่มเติมหรือย้อนกลับ มันจะต้องง่ายต่อการค้นหาผู้ที่แก้ไขแถวจากที่อยู่ IP และเวลาใดและสามารถกู้คืนเวอร์ชันก่อนหน้าได้ สิ่งที่คล้ายกันนั้นใช้โดย Stack Exchange เมื่อฉันเปลี่ยนคำถามของคนอื่นมันเป็นไปได้ที่จะพบว่าฉันเปลี่ยนมันและย้อนกลับการเปลี่ยนแปลง เทคนิคทั่วไปที่ใช้ในการจัดเก็บการเปลี่ยนแปลงทุกอย่างกับวัตถุในฐานข้อมูลคืออะไรเนื่องจากสคีมาปัจจุบันของฉันมีคุณสมบัติเหมือนกัน (ด้านล่าง) ส่วนใหญ่ที่เป็นแอปทางธุรกิจโดยเฉลี่ย วัตถุที่มีขนาดค่อนข้างเล็ก: อาจจะมีบางnvarchar(1000)ตัวอย่างเช่น แต่ไม่ blobs ใหญ่ของข้อมูลไบนารีหนึ่งนี้ถูกเก็บไว้โดยตรงบนดิสก์และเข้าถึงได้โดยตรงและไม่ผ่าน Microsoft SQL filestream, โหลดฐานข้อมูลค่อนข้างต่ำและฐานข้อมูลทั้งหมดได้รับการจัดการโดยเครื่องเสมือนหนึ่งเครื่องบนเซิร์ฟเวอร์ การเข้าถึงเวอร์ชันก่อนหน้าไม่จำเป็นต้องรวดเร็วเท่ากับการเข้าถึงเวอร์ชันล่าสุด แต่ยังต้องเป็นเวอร์ชันล่าสุดและไม่ช้าเกินไป² <TL-DR> ฉันคิดเกี่ยวกับกรณีต่อไปนี้ แต่ฉันไม่มีประสบการณ์จริงกับสถานการณ์เหล่านั้นดังนั้นฉันจะได้ยินความคิดเห็นของผู้อื่น: เก็บทุกอย่างไว้ในตารางเดียวกันโดยแยกแถวตาม ID และรุ่น IMO มันโง่มากและจะเจ็บไม่ช้าก็เร็วในระดับประสิทธิภาพ ด้วยวิธีนี้มันเป็นไปไม่ได้ที่จะตั้งระดับความปลอดภัยที่แตกต่างกันไปเป็นไอเท็มล่าสุดและการติดตามเวอร์ชั่น ในที่สุดทุกคำถามจะมีความซับซ้อนในการเขียน ที่จริงแล้วในการเข้าถึงข้อมูลที่ทันสมัยฉันจะถูกบังคับให้จัดกลุ่มทุกอย่างด้วยรหัสและดึงข้อมูลในแต่ละกลุ่มเวอร์ชันสุดท้าย เก็บเวอร์ชันล่าสุดไว้ในตารางเดียวและในทุก ๆ การเปลี่ยนแปลงให้คัดลอกเวอร์ชันที่ล้าสมัยไปยังตารางอื่นในสคีมาอื่น ข้อบกพร่องคือทุกครั้งที่เราเก็บทุกค่าแม้ว่ามันจะไม่เปลี่ยนแปลง การตั้งค่าการเปลี่ยนแปลงที่จะnullไม่ได้เป็นวิธีการแก้ปัญหาตั้งแต่ฉันยังต้องติดตามเมื่อค่าที่มีการเปลี่ยนแปลงไปหรือจากnullnull เก็บเวอร์ชันล่าสุดไว้ในตารางเดียวและรายการคุณสมบัติที่เปลี่ยนแปลงด้วยค่าก่อนหน้าในตารางอื่น นี้ดูเหมือนว่ามีสองข้อบกพร่อง: binary(max)หนึ่งที่สำคัญที่สุดคือว่าวิธีเดียวที่จะเรียงลำดับประเภทที่แตกต่างกันของค่าก่อนหน้านี้ในคอลัมน์เดียวกันคือการมี อย่างที่สองคือฉันเชื่อว่ามันจะยากกว่าที่จะใช้โครงสร้างดังกล่าวเมื่อแสดงเวอร์ชันก่อนหน้าแก่ผู้ใช้ ทำสิ่งเดียวกันกับในสองประเด็นก่อนหน้านี้ แต่เก็บรุ่นไว้ในฐานข้อมูลแยกต่างหาก ประสิทธิภาพอาจเป็นเรื่องที่น่าสนใจเพื่อหลีกเลี่ยงการชะลอการเข้าถึงเวอร์ชันล่าสุดโดยให้มีเวอร์ชันก่อนหน้าในฐานข้อมูลเดียวกัน ยังฉันเชื่อว่ามันเป็นการเพิ่มประสิทธิภาพก่อนวัยอันควรและจะต้องทำก็ต่อเมื่อมีหลักฐานที่แสดงว่ารุ่นเก่าและรุ่นล่าสุดในฐานข้อมูลเดียวกันเป็นคอขวด </ TL-DR> ¹ตัวอย่างเช่นจะไม่สามารถจัดเก็บการเปลี่ยนแปลงลงในไฟล์บันทึกได้เนื่องจากจะทำเพื่อบันทึก HTTP …

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

3
วิธีทำการสั่งแบบมีเงื่อนไขสำหรับคอลัมน์สองคอลัมน์ขึ้นไป
ใน MS SQL Server 2005 ฉันกำลังเขียนแบบสอบถามหนึ่งรายการที่มีการเรียงลำดับตามเงื่อนไขและปัญหาของฉันคือฉันไม่รู้ว่าฉันจะเรียงลำดับตามเงื่อนไขได้อย่างไรโดยใช้สองคอลัมน์ ถ้าฉันเขียนโค้ดแบบนี้มันใช้งานได้ปกติ select * from table order by case @pkr when 'kol' then kol when 'nci' then nci end ฉันไม่ทราบวิธีการสั่งซื้อแบบมีเงื่อนไขสำหรับคอลัมน์สองคอลัมน์ขึ้นไป select * from table order by case @pkr when 'KOL-NCI' then kol,nci when 'kol-MPCI' then kol,mpci end มีแนวคิดที่จะสร้าง TSQL แบบไดนามิกและใช้งานsp_executesqlแต่ฉันยังคงมองหาแนวคิดที่ดีกว่าอยู่ใช่ไหม

3
จะทดสอบเซิร์ฟเวอร์ SQL ได้อย่างไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันได้รับมอบหมายให้ทดสอบเซิร์ฟเวอร์ MSSQL และ MySQL Server ของเรา ฉันต้องการทราบว่ามีเครื่องมือหรือสคริปต์ใดบ้างที่ฉันสามารถใช้กับระบบปัจจุบันของเราและระบบใหม่เพื่อเปรียบเทียบประสิทธิภาพได้หรือไม่ ฉันต้องการวัดอ่าน / เขียนข้อมูลลงดิสก์และประสิทธิภาพของโปรเซสเซอร์ สิ่งอื่นใดที่อาจเป็นประโยชน์ก็ยอดเยี่ยมเช่นกัน ขอบคุณ!

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

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