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

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

2
ผู้ขายต้องการเรียกใช้งาน MSDB ทุก ๆ 5 นาทีสำหรับแอปพลิเคชันธุรกิจ
เรามีผู้จำหน่ายบุคคลที่สามที่พยายามรวม 2 แอพพลิเคชั่นที่ต่างกันซึ่งทั้งคู่อยู่ในอินสแตนซ์ของ SQL Server ของเราด้วย 150+ ฐานข้อมูลอื่น ๆ และพวกเขาต้องการสร้างงาน MSDB เพื่อ "ซิงค์" แอพพลิเคชั่น ต้องการเรียกใช้ทุกนาที) ลางสังหรณ์เริ่มต้นของฉันคือพวกเขาควรทำสิ่งนี้แทนในระดับแอปพลิเคชันด้วยงานที่กำหนดเวลาไว้กับ Windows หรืออาจเป็นทริกเกอร์ที่หวั่นเกรง (ซึ่งเรามักจะหันไปใช้ในสถานการณ์เช่นนี้) ฉันต้องการให้งาน MSDB สงวนไว้สำหรับงาน DBA ให้มากที่สุดเพื่อลดความยุ่งเหยิงที่นั่นและยังมีการสืบค้น MSDB ที่ช้าเมื่อดูประวัติงานด้วยงานแอคทีฟสุด ๆ เช่นนี้ (ซึ่งยังจมอยู่และเลื่อนประวัติงานสำคัญของ สิ่งที่สำคัญกว่าเช่นประวัติการสำรองข้อมูล) แต่แล้วอีกครั้งบางทีการตั้งค่าของฉันผิดและฉันต้องทำให้บางพื้นที่สำหรับ Application Tier ใน MSDB และพับแขนเสื้อของฉันและแก้ไขปัญหาประวัติงานสละเวลาตลอดไปในการโหลดเมื่อฉันต้องการเก็บรายการประวัติเพิ่มเติมเพื่อจับภาพ สิ่งสำคัญเช่นการสำรองข้อมูล (หรือล้างรายการงานที่ใช้งานมากเกินไป) ปัญหาอื่นที่ฉันมีคือตอนนี้ฉันต้องให้สิทธิ์ผู้ดูแลระบบ "sysadmin" นี้แทนสิทธิ์ "dbo" เฉพาะบน DBs ของพวกเขาเท่านั้นเมื่อพวกเขาทำการอัปเกรดผ่าน GUI และหวังว่าพวกเขาจะไม่ระเบิดอินสแตนซ์ที่ภารกิจสำคัญของฉัน ฐานข้อมูลคือ (หนึ่งในข้อเสียของการรวม) ฉันเดาว่าฉันสามารถใส่พวกเขาในอินสแตนซ์ …

3
มีการแชร์อะไรระหว่างสองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกัน
เราต้องการติดตั้ง SQL Server หลายอินสแตนซ์บนเซิร์ฟเวอร์ Windows เครื่องเดียว เราไม่สามารถใช้ VM ได้เพราะเซิร์ฟเวอร์นั้นเป็นโลหะเปลือย Windows 2008 R2 เพื่อจุดประสงค์ด้านความปลอดภัยเราจำเป็นต้องตรวจสอบให้แน่ใจว่าทั้งสองอินสแตนซ์ไม่มีส่วนเกี่ยวข้องใด ๆ รวมถึงการจัดการบริการ Windows บัญชีและอื่น ๆ ดังนั้นฉันเดาว่าคำถามคือ: เมื่อติดตั้ง "อินสแตนซ์" ของ SQL Server มากกว่าหนึ่งตัวบนเซิร์ฟเวอร์ Windows จะมีการแชร์อะไรบ้าง

1
SQL Server รู้ว่าภาคแสดงมีความสัมพันธ์กันอย่างไร
ในขณะที่การวิเคราะห์แบบสอบถาม SQL Server 2008 R2 ด้วยการประมาณค่า cardinality ที่ไม่ดี (แม้จะมีการทำดัชนีอย่างง่ายสถิติที่ทันสมัย ​​ฯลฯ ) และด้วยเหตุนี้แผนการสืบค้นที่ไม่ดีฉันพบบทความ KB ที่เกี่ยวข้องบางที: การ แก้ไข: ประสิทธิภาพแย่เมื่อคุณเรียกใช้แบบสอบถาม ที่ประกอบด้วยสหสัมพันธ์และเพรดิเคตใน SQL Server 2008 หรือใน SQL Server 2008 R2 หรือใน SQL Server 2012 ฉันสามารถเดาได้ว่าบทความ KB หมายถึงอะไรโดย "มีความสัมพันธ์" เช่นภาคแสดงข้อ 2 และภาคส่วน # 1 ส่วนใหญ่กำหนดเป้าหมายไปที่แถวเดียวกัน แต่ฉันไม่รู้ว่า SQL Server รู้เกี่ยวกับสหสัมพันธ์เหล่านี้อย่างไร ตารางต้องการดัชนีหลายคอลัมน์ที่มีคอลัมน์จากเพรดิเคตทั้งสองหรือไม่ SQL ใช้สถิติเพื่อตรวจสอบว่าค่าจากคอลัมน์หนึ่งมีความสัมพันธ์กับอีกคอลัมน์หนึ่งหรือไม่? หรือมีวิธีอื่นที่ใช้? ฉันขอสิ่งนี้ด้วยสองเหตุผล: เพื่อกำหนดว่าตารางและแบบสอบถามใดของฉันอาจได้รับการปรับปรุงโดยใช้โปรแกรมแก้ไขด่วนนี้ …

3
สร้างฟังก์ชั่นใหม่ด้วยรหัสถ้ามันไม่มีอยู่
ฉันต้องการสร้างฟังก์ชั่นใหม่ตามสคริปต์ในฐานข้อมูลของฉัน รหัสสคริปต์ด้านล่าง: IF Exists(Select * From sys.sysobjects A Where A.name =N'fn_myfunc' and xtype=N'FN') return; CREATE FUNCTION fn_myfunc () returns varchar(10) AS Begin ... End แต่เมื่อฉันรันสคริปต์ข้างต้น SQL Server จะส่งคืนข้อผิดพลาด: 'CREATE FUNCTION' must be the first statement in a query batch.

2
วิธีแก้ปัญหาการล้างข้อมูลผีของเซิร์ฟเวอร์ SQL ที่จำเป็น
ฉันมีหลายตารางที่มีจำนวนแถวระหว่าง 5M ถึง 1.5G แต่ละตารางมีเขตข้อมูล BLOB ซึ่งขนาดแตกต่างจาก 100 ไบต์ถึง 30 MBytes และเก็บไว้เป็น 'ประเภทค่าขนาดใหญ่นอกแถว' = ON ตารางจะถูกจัดเก็บในกลุ่มไฟล์ที่แตกต่างกันโดยแต่ละไฟล์มี 3-4 ไฟล์ในดิสก์ที่แตกต่างกัน @ LUNs ที่แตกต่างกัน @ SAN ที่เร็วมาก ทุกวันโต๊ะเหล่านี้มีขนาดโตขึ้น 5-100 Gb และมีแถว 600k - 1.5M หลังจากระยะเวลาหนึ่งซึ่งแตกต่างกันไปจาก 2 สัปดาห์ถึง 6 เดือนแถวบางแถวจะถูกลบหรือย้ายไปเก็บถาวร DB ดังนั้นจึงไม่มีแถวใด ๆ ในเวิร์กทอรีที่มีอายุมากกว่า 6 เดือน การกำหนดค่าปัจจุบันของเซิร์ฟเวอร์: SQL เซิร์ฟเวอร์เอ็นจิ้นคือ 2008 R2 SP1 Enterprise @ …

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

1
การตีความ Showplan XML ของ SQL Server
ฉันเพิ่งเปิดตัวฟีเจอร์บนเว็บไซต์ของฉันที่http://sqlfiddle.comซึ่งอนุญาตให้ผู้ใช้ดูแผนปฏิบัติการแบบดิบสำหรับการสืบค้น ในกรณีของ PostgreSQL, MySQL และ (ในระดับหนึ่ง) Oracle การดูผลลัพธ์ของแผนการดำเนินการดิบนั้นสามารถเข้าใจได้ อย่างไรก็ตามหากคุณดูผลลัพธ์ของแผนการดำเนินการสำหรับ SQL Server (สร้างด้วยSET SHOWPLAN_XML ON) จะมี XML จำนวนมหาศาลที่สามารถลุยได้แม้จะเป็นการสืบค้นที่ค่อนข้างง่าย นี่คือตัวอย่าง (นำมาจากแผนการดำเนินการของแบบสอบถามล่าสุดสำหรับ 'ซอ': http://sqlfiddle.com/#!3/1fa93/1 ): <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96"> <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/> …

1
ถอดรหัส Base64 String ใน SQL Server
ฉันมีvarcharคอลัมน์ในตารางใน SQL Server ซึ่งเก็บสตริงข้อความที่เข้ารหัส base64 ซึ่งฉันต้องการถอดรหัสเป็นข้อความธรรมดาที่เทียบเท่า SQL Server มีฟังก์ชันดั้งเดิมใด ๆเพื่อจัดการกับสิ่งนี้หรือไม่? สตริง base64 ตัวอย่าง: cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA== ซึ่งถอดรหัสเป็น: role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

4
เปลี่ยนแบบสอบถามเพื่อปรับปรุงการประมาณการของผู้ให้บริการ
ฉันมีข้อความค้นหาที่ทำงานในเวลาที่ยอมรับได้ แต่ฉันต้องการบีบประสิทธิภาพให้ได้มากที่สุด การดำเนินการที่ฉันพยายามปรับปรุงคือ "ดัชนีค้นหา" ที่ด้านขวาของแผนจากโหนด 17 ฉันได้เพิ่มดัชนีที่เหมาะสม แต่ค่าประมาณที่ฉันได้รับสำหรับการดำเนินการนั้นเป็นครึ่งหนึ่งของที่ควรจะเป็น ฉันค้นหาการเปลี่ยนแปลงดัชนีและเพิ่มตารางชั่วคราวและเขียนแบบสอบถามอีกครั้ง แต่ฉันไม่สามารถทำให้มันง่ายไปกว่านี้เพื่อให้ได้ค่าประมาณที่ถูกต้อง ใครบ้างมีคำแนะนำเกี่ยวกับสิ่งอื่นที่ฉันสามารถลองได้บ้าง แผนเต็มรูปแบบและรายละเอียดที่สามารถพบได้ที่นี่ แผนไม่ระบุชื่อสามารถพบได้ที่นี่ ปรับปรุง: ฉันรู้สึกว่าคำถามเริ่มต้นสร้างความสับสนอย่างมากดังนั้นฉันจะเพิ่มรหัสดั้งเดิมพร้อมคำอธิบายบางอย่าง create procedure [dbo].[someProcedure] @asType int, @customAttrValIds idlist readonly as begin set nocount on; declare @dist_ca_id int; select * into #temp from @customAttrValIds where id is not null; select @dist_ca_id = count(distinct CustomAttrID) from CustomAttributeValues c …

2
ความรู้สึกและประโยชน์ของการใช้ SqlCommand.Prepare () คืออะไร?
ฉันเจอรหัสนักพัฒนาซอฟต์แวร์ที่ SqlCommand.Prepare () (ดู MSDN)วิธีการใช้อย่างกว้างขวางล่วงหน้าก่อนการดำเนินการของแบบสอบถาม SQL และฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร? ตัวอย่าง: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); ฉันได้เล่นไปรอบ ๆ เล็กน้อยและติดตาม การดำเนินการของคำสั่งหลังจากเรียกPrepare()วิธีทำให้ SQL Server ดำเนินการคำสั่งต่อไปนี้: declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 หลังจากนั้นเมื่อพารามิเตอร์ได้รับมันเป็นค่าและSqlCommand.ExecuteNonQuery()ถูกเรียกต่อไปนี้ได้รับการดำเนินการใน Sql-Server: exec sp_execute 1,@id=20 สำหรับฉันแล้วดูเหมือนว่าคำสั่งจะได้รับการรวบรวมเมื่อPrepare()มีการดำเนินการในไม่ช้า ฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร นี่หมายความว่าใส่ลงในแคชแผนและสามารถนำกลับมาใช้ใหม่ได้ทันทีที่มีการดำเนินการคิวรีสุดท้ายด้วยค่าพารามิเตอร์ที่ต้องการ? ฉันคิดออก (และบันทึกไว้ในคำถามอื่น …

5
ขนาดคุณสมบัติไม่พร้อมใช้งานสำหรับฐานข้อมูล
ฉันเพิ่งกู้คืนฐานข้อมูลเป็นอินสแตนซ์เดียวกันกับที่สำรองไว้ (SQL Server 2008 R2 Enterprise) และพบว่าฉันไม่สามารถเข้าถึงคุณสมบัติฐานข้อมูลได้ ฉันทำสิ่งต่อไปนี้แล้ว: sp_helpdbการตรวจสอบการใช้ฐานข้อมูลถูกตั้งอย่างถูกต้องโดยใช้ saการเปลี่ยนแปลงการใช้ฐานข้อมูลเพื่อ ไม่ใช่การแก้ไข เปลี่ยนเจ้าของฐานข้อมูลกลับเป็นsysadminผู้ใช้ของฉัน ไม่ใช่การแก้ไข ออกให้DBCC updateusageกับฐานข้อมูลที่ได้รับผลกระทบ ไม่ใช่การแก้ไข รันDBCC CheckDBบนสำเนาที่กู้คืนไปยังอินสแตนซ์อื่น ไม่พบความเสียหาย สำเนาที่กู้คืน (จากไฟล์สำรองเดียวกัน) ไม่ทิ้งข้อผิดพลาดใด ๆ เมื่อเข้าถึงหน้าต่างคุณสมบัติฐานข้อมูล ใครช่วยได้บ้าง ข้อความแสดงข้อผิดพลาดที่ฉันได้รับเมื่อพยายามดูคุณสมบัติคือ: ไม่สามารถแสดงกล่องโต้ตอบที่ร้องขอ (SqlMgmt) ขนาดคุณสมบัติไม่พร้อมใช้งานสำหรับฐานข้อมูล '[DBNAME]' คุณสมบัตินี้อาจไม่มีอยู่สำหรับวัตถุนี้หรืออาจไม่สามารถเรียกคืนได้เนื่องจากสิทธิ์การเข้าถึงไม่เพียงพอ (Microsoft.SqlServer.Smo) ฉันเป็นแบบsysadminนี้ อัปเดต: ตามที่แนะนำฉันได้สร้างผู้ใช้ใหม่ทำให้เป็นดูแลระบบและเปลี่ยนเจ้าของฐานข้อมูลเป็น ไม่แก้ไขอย่างน่าเสียดาย ฉันจะดูว่าการติดตามของ profiler ทำให้เกิดประโยชน์หรือไม่ อัปเดต: แอรอน - ฐานข้อมูลดั้งเดิมถูกเปลี่ยนชื่อและออฟไลน์ แต่ยังอยู่ในอินสแตนซ์นั้น การสำรองข้อมูลของฐานข้อมูลนั้นจะถูกกู้คืนโดยใช้ชื่อเดิม ชื่อไฟล์ของไฟล์ฐานข้อมูลใหม่นั้นแตกต่างจากของจริงเพราะอยู่ในโฟลเดอร์เดียวกับไฟล์ mdf / ldf ต้นฉบับ …

7
ฉันจะสำรองข้อมูลของตารางเฉพาะใน SQL Server 2008 โดยใช้ T-SQL Script ได้อย่างไร
ฉันต้องการสำรองข้อมูลของตารางเฉพาะที่มีอยู่ในฐานข้อมูลของฉันใน.bakไฟล์และสิ่งเหล่านี้ควรทำโดยใช้สคริปต์ T-SQL

1
การคอมไพล์บล็อกมากเกินไปใน sp_procedure_params_90_rowset
การฟื้นตัวของคำถามนี้ใน MSDN: ถูกบล็อก - กระบวนการรายงาน: แหล่งข้อมูลนี้รออะไร "OBJECT: 32767: 124607697: 0 [คอมไพล์]" ฉันตรวจพบข้อความเหล่านี้ใน Profiler แล้ว พวกเขาทั้งหมดมีระยะเวลามากกว่า 3 วินาที มากกว่า 10 คนขึ้นไป กิจกรรมการปิดกั้นเป็นเช่นเดียวกับการเชื่อมโยงจากMSDN การโทรทั้งหมดใช้การตั้งชื่อ 3 ส่วน ทั้งหมดระบุ proc ที่แตกต่างกันในรูปแบบที่มีลักษณะดังต่อไปนี้: exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, …

3
ปรับปรุงประสิทธิภาพของการสืบค้นโดยใช้ IN ()
ฉันมีแบบสอบถาม SQL ต่อไปนี้: SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER …

2
การปรับประสิทธิภาพสำหรับตารางขนาดใหญ่ (SQL Server 2008 R2)
ข้อมูลประกอบ: ฉันมีตารางความจริงในระยะเอือด วัตถุประสงค์ในการโหลดข้อมูล 5 ปีใน Prod (คาดว่าจะมีขนาด 400 ล้านระเบียน) ขณะนี้มีข้อมูลทดสอบเพียง 2 ปี คุณสมบัติตาราง: ไม่มีขนาด ~ 45 มาตรการ ~ 30 มาตรการที่ไม่ใช่สารเติมแต่งและคอลัมน์อื่น ๆ ~ 25 ขนาดข้อมูลปัจจุบัน ~ 200 ล้าน (ข้อมูล 2 ปี) มุมมองเวลา: มุมมองเดือนที่แตกต่างกัน 3 แบบ: การคลัง / ปฏิทิน / ปรับ (เช่นแถวเดียวกันอาจอยู่ในเดือนที่ต่างกันโดยขึ้นอยู่กับว่ามุมมองใดที่กำลังมองหา) ผู้ใช้ต้องเรียกดูครั้งละหนึ่งมุมมอง (เช่น. จะมีการใช้คอลัมน์เดือนเดียวเท่านั้นในแบบสอบถามซึ่งจะทำให้เราต้องทำการแบ่งพาร์ติชันตามเวลา) ดัชนี: 1 ดัชนีกลุ่มบนคีย์ธรรมชาติ (8 คอลัมน์) สร้างขึ้น 3 …

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