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

SQL Server 2008 (รุ่นบิลด์หลัก 10.00.xxxx) โปรดติดแท็กด้วย sql-server

4
หน่วยความจำสูงสุดของเซิร์ฟเวอร์ SQL ไม่ จำกัด การใช้ RAM
ฉันต้องการให้คุณป้อนข้อมูลนี้ ฉันมี sql server 2008r2 Ent เอ็ด 64 บิตพร้อม 16 คอร์และ RAM 64GB มีอินสแตนซ์หนึ่งของเซิร์ฟเวอร์ SQL ที่ได้รับการแพตช์อย่างสมบูรณ์ตั้งแต่ 20111014 หน่วยความจำสูงสุดถูกตั้งไว้ที่ 60000MB จำนวน ram ฟรี 0 ตามตัวจัดการงานหลังจากสองสามวันออนไลน์ ถ้าฉันเปลี่ยน ram สูงสุดเป็นต่ำกว่า 53GB มันจะหลังจากนั้นสองสามวันเพื่อทำให้เสถียรและมี ram ฟรี เป็นกระบวนการ sql ที่จัดสรร ram ตามตัวจัดการงาน ฉันจะตกลงกับสิ่งที่เป็นปัญหาได้อย่างไร? มันไปโดยไม่บอกว่าฉันทำการทดสอบจำนวนมากแล้ว แต่ก็ยังไม่ได้แก้ไขสิ่งนี้ตามความชอบของฉัน และโอ้เราไม่ได้รับความอดอยากของหน่วยความจำทั่วไปเมื่อ ram ที่มีอยู่ลดลงเหลือ 0 อัปเดต 1: แรงบันดาลใจจากอีก Q / เกี่ยวข้องกับแรมในหน้านี้/dba//a/7062/2744 ฉันใช้สองสิ่งนี้เพื่อดูว่า …

3
จะเก็บบันทึกเว็บเซิร์ฟเวอร์ 'วัน' ใน SQL Server ได้อย่างไร
สำหรับการรายงานที่รวดเร็วขึ้นและการวิเคราะห์ประสิทธิภาพเราต้องการแทรกบันทึกการใช้เว็บเซิร์ฟเวอร์ลงใน SQL Server สิ่งนี้จะช่วยให้เราเห็นรูปแบบการจราจรปัญหาการชะลอตัวในเวลาใกล้เคียงแบบเรียลไทม์ เรามีดีมอนที่รับฟังกิจกรรมการร้องขอ / ตอบสนองจาก load balancer และแทรกจำนวนมากของเราในฐานข้อมูล อย่างไรก็ตามเราได้รับบันทึกประมาณ 1 GB ต่อวันและเราต้องเก็บประมาณหนึ่งสัปดาห์ (อย่างน้อยในรูปแบบดิบนี้) วิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้และวิธีที่ดีที่สุดในการลบรายการเก่าคืออะไร? เราได้พูดคุยเกี่ยวกับการจัดเก็บข้อมูลของแต่ละวันในตารางของตัวเองเช่นLog_2011_04_07จะมีรายการทั้งหมดสำหรับวันนั้นแล้ววางตารางที่เก่าที่สุด สามารถสร้างมุมมองเพื่อขยายตารางวันทั้งหมดเพื่อให้ง่ายต่อการสืบค้น เป็นไปได้หรือไม่

3
เหตุใดพื้นที่ข้อมูลของตารางจึงอาจมีขนาดเท่ากับข้อมูลดิบถึง 4x
ฉันมีตารางที่มีแถว 490 M และพื้นที่ตาราง 55 GB ดังนั้นประมาณ 167 ไบต์ต่อแถว ตารางมีสามคอลัมน์: กVARCHAR(100)เป็นและDATETIME2(0) SMALLINTความยาวเฉลี่ยของข้อความในVARCHARฟิลด์คือประมาณ 21.5 ดังนั้นข้อมูลดิบควรอยู่ที่ประมาณ 32 ไบต์ต่อแถว: 22 + 2 สำหรับVARCHAR, 6 สำหรับDATETIME2, และ 2 สำหรับจำนวนเต็ม 16 บิต โปรดทราบว่าพื้นที่ด้านบนเป็นข้อมูลเท่านั้นไม่ใช่ดัชนี ฉันใช้ค่ารายงานภายใต้คุณสมบัติ | จัดเก็บข้อมูล | ทั่วไป | พื้นที่ข้อมูล แน่นอนว่าต้องมีค่าใช้จ่ายอยู่บ้างแต่ดูเหมือนว่า 135 ไบต์ต่อแถวดูเหมือนจะเยอะมากโดยเฉพาะกับโต๊ะตัวใหญ่ เหตุใดจึงเป็นเช่นนี้ มีคนอื่นเห็นตัวคูณที่เหมือนกันหรือไม่ ปัจจัยใดที่สามารถส่งผลต่อปริมาณพื้นที่เพิ่มเติมที่ต้องการ สำหรับการเปรียบเทียบฉันพยายามสร้างตารางที่มีสองINTฟิลด์และ 1 M แถว พื้นที่ข้อมูลที่ต้องการคือ 16.4 MB: 17 ไบต์ต่อแถวเมื่อเปรียบเทียบกับข้อมูลดิบ …

2
เหตุใด SQL Injection จึงไม่เกิดขึ้นกับแบบสอบถามนี้ภายในกระบวนงานที่เก็บไว้
ฉันทำขั้นตอนการจัดเก็บต่อไปนี้: ALTER PROCEDURE usp_actorBirthdays (@nameString nvarchar(100), @actorgender nvarchar(100)) AS SELECT ActorDOB, ActorName FROM tblActor WHERE ActorName LIKE '%' + @nameString + '%' AND ActorGender = @actorgender ตอนนี้ฉันพยายามทำอะไรแบบนี้ บางทีฉันอาจทำผิด แต่ฉันต้องการให้แน่ใจว่ากระบวนการดังกล่าวสามารถป้องกัน SQL Injection: EXEC usp_actorBirthdays 'Tom', 'Male; DROP TABLE tblActor' ภาพด้านล่างแสดง SQL ด้านบนที่ถูกดำเนินการใน SSMS และผลลัพธ์ถูกแสดงอย่างถูกต้องแทนที่จะมีข้อผิดพลาด: Btw ฉันเพิ่มส่วนต่อไปที่อัฒภาคหลังจากแบบสอบถามเสร็จสิ้นการดำเนินการ จากนั้นฉันก็ดำเนินการอีกครั้ง แต่เมื่อฉันตรวจสอบเพื่อดูว่าตาราง tblActor มีอยู่หรือไม่มันยังคงอยู่ที่นั่น ฉันกำลังทำอะไรผิดหรือเปล่า? …

2
อะไรคือความแตกต่างระหว่างหน้าเว็บแบบ leaf และแบบ non-leaf?
ฉันได้รับการเรียกใช้รายงานการใช้งานดัชนีบางส่วนและฉันพยายามที่จะได้รับความหมายของใบและNon-ใบ ดูเหมือนว่าจะมีทั้งส่วนแทรกและส่วนที่ไม่ใช่ใบไม้การอัปเดตการลบการรวมหน้าและการจัดสรรหน้า ฉันไม่รู้จริงๆว่ามันหมายถึงอะไรหรือถ้ามีคนหนึ่งดีกว่าคนอื่น หากใครบางคนสามารถให้คำจำกัดความที่เรียบง่ายของแต่ละคนและอธิบายว่าทำไมเรื่อง Leaf หรือ Non-leaf ก็จะได้รับการชื่นชม!

1
ละเว้นการเน้นเสียงใน 'ที่ไหน'
ในฐานข้อมูลของเราเรามีหลายรายการที่มี caron / hatschek ตอนนี้ผู้ใช้ของเราต้องการค้นหารายการรวมถึง caron / hatschek เมื่อค้นหารายการที่ไม่มี ฉันจะแสดงสิ่งนี้ด้วยตัวอย่างง่ายๆ: ในฐานข้อมูลของเราเรามีรายการ (ติดต่อกับชื่อ) Millière ดังนั้นชื่อนี้ถูกต้องในประเทศที่บุคคลนั้นอาศัยอยู่ ในประเทศของเราเราไม่ได้มีตัวอักษรใด ๆ กับรอน / hatschek Milliereดังนั้นผู้ใช้ค้นหาของเราสำหรับ ไม่มีผลการค้นหาขึ้นมาเป็นไม่ชัดไม่ตรงกับèe ผมไม่มีความคิดวิธีนี้อาจจะตระหนักว่าé, è, êและอื่น ๆ อีกมากมายที่มีอยู่ (และนี่เป็นเพียงตัวอย่างจดหมายe... ) (วิธีอื่นจะง่ายกว่ามากเพราะฉันสามารถแทนที่ตัวอักษรทั้งหมดด้วย caron / hatschek ด้วยตัวอักษรพื้นฐานได้อย่างชัดเจนเห็นได้ชัดว่าผู้ใช้ของเราต้องการชื่อรุ่นที่ถูกต้องในฐานข้อมูลไม่ใช่คนพิการ)

3
ฉันจะวางทริกเกอร์ทั้งหมดในฐานข้อมูลเดียวได้อย่างไร
ฉันมีฐานข้อมูล 104 ทริกเกอร์มีวิธีลบทริกเกอร์ทั้งหมดด้วยคำสั่งเดียวจากฐานข้อมูลเดียวที่เรียกว่า 'system_db_audits หรือไม่

1
วิธีที่ดีที่สุดในการเขียน SQL Query ที่ตรวจสอบคอลัมน์สำหรับค่าที่ไม่เป็น NULL หรือ NULL
ฉันมี SP พร้อมพารามิเตอร์ที่มีค่า NULL เป็นค่าเริ่มต้นจากนั้นฉันต้องการสอบถามเช่นนี้ SELECT ... FROM ... WHERE a.Blah = @Blah AND (a.VersionId = @VersionId OR (@VersionId IS NULL AND a.VersionId IS NULL)); WHEREตรวจสอบข้างต้นสำหรับทั้งค่าที่ไม่เป็นโมฆะและค่า NULL @VersionIdสำหรับ มันจะดีกว่าในแง่ของประสิทธิภาพแทนที่จะใช้IFคำสั่งและทำซ้ำแบบสอบถามเป็นที่ค้นหา non-NULL และอื่นสำหรับ NULL เช่นนั้น : IF @VersionId IS NULL BEGIN SELECT ... FROM ... WHERE a.Blah = @Blah AND a.VersionId IS …

2
ขั้นตอนการจัดเก็บกลางเพื่อดำเนินการในบริบทฐานข้อมูลการโทร
ฉันกำลังทำงานกับโซลูชันการบำรุงรักษาที่กำหนดเองโดยใช้sys.dm_db_index_physical_statsมุมมอง ฉันมีมันถูกอ้างอิงจากขั้นตอนการจัดเก็บ ตอนนี้เมื่อโพรซีเดอร์ที่เก็บรันบนหนึ่งในฐานข้อมูลของฉันมันทำสิ่งที่ฉันต้องการให้ทำและดึงรายการของระเบียนทั้งหมดที่เกี่ยวข้องกับฐานข้อมูลใด ๆ ลง เมื่อฉันวางไว้ในฐานข้อมูลอื่นมันจะดึงรายการทั้งหมดที่เกี่ยวข้องกับฐานข้อมูลนั้นลง ตัวอย่างเช่น (รหัสที่ด้านล่าง): การค้นหาทำงานกับฐานข้อมูล 6 แสดงข้อมูล [ร้องขอ] สำหรับฐานข้อมูล 1-10 เคียวรีรันกับฐานข้อมูล 3 แสดงข้อมูล [ร้องขอ] สำหรับฐานข้อมูล 3 เท่านั้น เหตุผลที่ฉันต้องการขั้นตอนนี้โดยเฉพาะในฐานข้อมูลสามเป็นเพราะฉันต้องการเก็บวัตถุการบำรุงรักษาทั้งหมดในฐานข้อมูลเดียวกัน ฉันต้องการให้งานนี้อยู่ในฐานข้อมูลการบำรุงรักษาและทำงานราวกับว่าอยู่ในฐานข้อมูลแอปพลิเคชันนั้น รหัส: ALTER PROCEDURE [dbo].[GetFragStats] @databaseName NVARCHAR(64) = NULL ,@tableName NVARCHAR(64) = NULL ,@indexID INT = NULL ,@partNumber INT = NULL ,@Mode NVARCHAR(64) = 'DETAILED' AS BEGIN SET …

1
สิทธิ์ของ SQL Server ในการสร้างเรียกคืนลบฐานข้อมูลบางอย่างเท่านั้น
บน MS SQL Server 2008 R2 ฉันต้องมีผู้ใช้ที่สามารถสร้าง, เรียกคืน, DBCC CHECKDB แล้วปล่อยฐานข้อมูล แต่เขาจะต้องไม่สามารถเข้าถึงหรือลบฐานข้อมูลที่ระบุบนเซิร์ฟเวอร์ (เหตุผลด้านความปลอดภัย) เป็นไปได้หรือไม่

2
การหยุดชะงักจากการล็อคบนตารางชั่วคราวเดียวกันในกระบวนการที่แตกต่างกัน
ฉันได้พบการหยุดชะงักที่ดูเหมือนจะแสดงสิ่งที่ฉันคิดว่าเป็นไปไม่ได้ มีสองกระบวนการที่เกี่ยวข้องในการหยุดชะงัก: 1. กระบวนการ 8cf948 SPID 63 ดำเนินการ ALTER TABLE บนตารางชั่วคราว #PB_Cost_Excp_Process_Invoices_Work เป็นเจ้าของล็อค IX บนโต๊ะ #PB_Cost_Excp_Process_Invoices_Work ด้วย ID วัตถุ 455743580 2. กระบวนการ 4cb3708 SPID 72 ดำเนินการใน UPDATE บนตารางชั่วคราว #PB_Cost_Excp_Process_Invoices_Work ซึ่งควรจะเป็นสำเนาเฉพาะของตาราง เป็นเจ้าของล็อค Sch-M ใน #PB_Cost_Excp_Process_Invoices_Work ด้วย ID วัตถุเดียวกัน 455743580 ! นี่น่าจะเป็นไปไม่ได้ ฉันพลาดอะไรไปรึเปล่า? #Temporary ตารางได้รับการใช้ซ้ำระหว่าง SPID ทั้งสองนี้จริง ๆ หรือไม่ นี่คือบน SQL Server …

3
การตั้งค่า CLR กลางที่เก็บ CLR โพรซีเดอร์ / ฟังก์ชันที่เก็บไลบรารีสำหรับ procs ที่จัดเก็บภายในในฐานข้อมูลอื่น ๆ ที่จะใช้?
ฉันต้องการใช้รหัสที่ฉันพัฒนาใน C # CLR เพื่อใช้ในฐานข้อมูลทั้งหมดในระบบเพื่อให้ฉันไม่ต้องตั้งค่าให้เชื่อถือได้และเปิด CLR และเก็บรหัสเดียวกันไว้ในแต่ละอัน . มีวิธีที่ดีที่สุดในการทำเช่นนี้จากมุมมองการบริหารและความปลอดภัย? ฟังก์ชัน CLR นั้นพื้นฐานมากเช่นตัวแบ่งสตริง, การตรวจสอบความถูกต้องของอีเมล, url en / decode, base64 และอื่น ๆ ฉันต้องการเฉพาะ dbo schema ในแต่ละฐานข้อมูลเพื่อให้สามารถเข้าถึงฟังก์ชันได้ มีวิธีง่าย ๆ ในการทำเช่นนี้? นอกจากนี้ฉันยังไม่ชัดเจนว่า CLR dll ถูกฝังอยู่หรือไม่และถ้าฉันย้ายฐานข้อมูลมันจะแท็กตามหรือฉันต้องย้าย dll ด้วยเช่นกัน ขอบคุณ

1
เมื่อใดที่คุณควรระบุ PAD_INDEX
ดังนั้นคุณสามารถใช้FILLFACTORเพื่อเว้นช่องว่างในหน้าดัชนีลีฟ การระบุPAD_INDEXยังเว้นช่องว่างในโหนดกลาง สถานการณ์ใดที่คุณควรระบุPAD_INDEXและมีประโยชน์อะไรบ้างต่อดัชนี

1
สตริงว่างเปล่า: ทำไมหรือเมื่อใดที่ '' เท่ากับ ''
ใครสามารถอธิบายได้ว่าทำไม select case when '' = ' ' then 1 else 0 end, LEN(''), LEN(' '), DATALENGTH(''), DATALENGTH(' '); อัตราผลตอบแทน ----------- ----------- ----------- ----------- ----------- 1 0 0 0 1 ผลที่ตามมาของเรื่องตลกคือสิ่งต่อไปนี้ create table test ( val varchar(10) ); insert into test values( '' ); update test set val = ' …

4
SQL ออกแบบตารางขนาดใหญ่
ฉันมีคำถามทั่วไปเกี่ยวกับการออกแบบตาราง SQL Server 2008 ขณะนี้เรามีตารางที่มีมากกว่า 600GB และเติบโตที่ประมาณ 3GB ต่อวัน ตารางนี้มีตัวบ่งชี้ที่เหมาะสม แต่กำลังกลายเป็น hangup ที่สำคัญเมื่อเรียกใช้คิวรีและเนื่องจากขนาดของมัน คำถามคือฉันควรแบ่งตารางออกเป็นหลาย ๆ ตารางตามปีและเดือน (ซึ่งจะเหมาะสมกับแผนกอื่น ๆ ที่แยกชุดข้อมูลขนาดใหญ่ของพวกเขา) หรือเราควรใช้ประโยชน์จากการแบ่งพาร์ติชันที่สร้างไว้ใน SQL Server ดูเหมือนว่าการใช้การแบ่งพาร์ติชันจะต้องมีการเปลี่ยนแปลงรหัสน้อย จากสิ่งที่ฉันอ่านเมื่อทำการแบ่งพาร์ติชั่นคุณยังคงสืบค้นเฉพาะหนึ่งตารางและเซิร์ฟเวอร์จะจัดการวิธีรับข้อมูล หากเราไปหลายเส้นทางเราจะต้องจัดการกับการดึงข้อมูลจากหลายตาราง

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