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

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

2
ทำไมการเปลี่ยนลำดับคอลัมน์การประกาศที่ประกาศจึงแนะนำการเรียงลำดับ
ฉันมีสองตารางที่มีชื่อคอลัมน์พิมพ์และดัชนีคีย์เหมือนกัน หนึ่งในพวกเขามีที่ไม่ซ้ำกันดัชนีคลัสเตอร์ที่หนึ่ง ๆ มีที่ไม่ซ้ำกัน การตั้งค่าการทดสอบ สคริปต์การตั้งค่ารวมถึงสถิติที่เป็นจริง: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL …

1
SQL Server: วิธีการติดตามความคืบหน้าของคำสั่ง CREATE INDEX?
SQL Server 2014, Std Ed ฉันได้อ่านว่า percent_complete ใน dm_exec_requests ใช้ไม่ได้กับ CREATE INDEX และในทางปฏิบัติแล้ว percent_complete sticks ที่ 0 ดังนั้นมันจึงไม่ช่วย ปัจจุบันฉันใช้วิธีการด้านล่างซึ่งอย่างน้อยก็แสดงให้ฉันเห็นการเคลื่อนไหว (ว่าการสร้างดัชนีไม่ได้ถูกบล็อก) แต่ฉันไม่มีความคิดถ้าฉัน% 10 ผ่านกระบวนการหรือ% 99 ฉันลองวิธีที่อธิบายไว้ที่นี่: https://dba.stackexchange.com/a/102545/6229 แต่มันแสดงให้เห็นว่าเวลาเสร็จสิ้นอย่างชัดเจนผิดปกติ (โดยทั่วไปจะแสดง 'ตอนนี้' เป็นเวลา 60 นาทีซึ่งฉันใช้เวลา 10 นาที ) ฉันจะได้รับเบาะแสได้อย่างไร SELECT percent_complete, estimated_completion_time, reads, writes, logical_reads, text_size, * FROM sys.dm_exec_requests AS r WHERE r.session_id …

1
DBA วันแรกในงานใหม่ - ตรวจสอบข้อมูลสำรองและความปลอดภัย - อย่างไร ควรตรวจสอบอะไรอีก
โดยทั่วไปเมื่อฉันเริ่มต้นในสภาพแวดล้อมใหม่ฉันมักจะตรวจสอบที่มีการสำรองข้อมูลเมื่อเต็มล่าสุดถูกนำมาใช้เมื่อมีการคืนค่าครั้งล่าสุดและฉันตรวจสอบความปลอดภัยด้วย วิธีที่ฉันทำคือผ่าน T-SQL ตรวจสอบข้อมูลสำรอง ;with Radhe as ( SELECT @@Servername as [Server_Name], B.name as Database_Name, ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup, ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate ,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2)) ,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2)) ,media_set_id = MAX(A.media_set_id) ,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int)) ,[Longest Backup …

1
ตัวดำเนินการสปูลกระตือรือร้นมีประโยชน์สำหรับการลบนี้จากคอลัมน์ในคลัสเตอร์หรือไม่
ฉันกำลังทดสอบการลบข้อมูลจากดัชนี columnstore แบบคลัสเตอร์ ฉันสังเกตเห็นว่ามีตัวดำเนินการเก็บพักขนาดใหญ่ที่กระตือรือร้นในแผนการดำเนินการ: สิ่งนี้เสร็จสมบูรณ์ด้วยคุณสมบัติดังต่อไปนี้: ลบ 60 ล้านแถว 1.9 GiB TempDB ใช้แล้ว เวลาดำเนินการ 14 นาที แผนอนุกรม 1 rebind บนสปูล ค่าใช้จ่ายโดยประมาณสำหรับการสแกน: 364.821 หากฉันหลอกผู้ประมาณค่าให้ดูถูกดูแคลนฉันจะได้รับแผนการที่เร็วกว่าและหลีกเลี่ยงการใช้ TempDB: ค่าใช้จ่ายโดยประมาณของการสแกน: 56.901 (นี่เป็นแผนโดยประมาณ แต่ตัวเลขในความคิดเห็นถูกต้อง) ที่น่าสนใจที่เก็บพักหายไปอีกครั้งถ้าฉันล้างร้านค้าเดลต้าโดยเรียกใช้ต่อไปนี้: ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); สปูลจะปรากฏขึ้นเฉพาะเมื่อมีจำนวนหน้ามากกว่าเกณฑ์ในร้านเดลต้า หากต้องการตรวจสอบขนาดของร้านค้าเดลต้าฉันกำลังเรียกใช้คิวรีต่อไปนี้เพื่อตรวจสอบหน้าในแถวสำหรับตาราง: SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as …

1
SQL Server 2014: คำอธิบายใด ๆ สำหรับการประเมิน cardinality ที่ไม่สอดคล้องกันของตนเอง?
พิจารณาแผนแบบสอบถามต่อไปนี้ใน SQL Server 2014: ในแผนแบบสอบถามการเข้าร่วมด้วยตนเองar.fId = ar.fIdจะให้ผลประมาณ 1 แถว อย่างไรก็ตามนี่เป็นค่าประมาณที่ไม่สอดคล้องกันเชิงตรรกะ: arมี20,608แถวและมีค่าที่แตกต่างกันเพียงหนึ่งค่าfId(สะท้อนให้เห็นอย่างถูกต้องในสถิติ) ดังนั้นการเข้าร่วมนี้จะสร้างผลิตภัณฑ์ไขว้เต็มของแถว ( ~424MMแถว) ทำให้คิวรีทำงานเป็นเวลาหลายชั่วโมง ฉันมีเวลายากที่จะเข้าใจว่าทำไม SQL Server ถึงได้มีการประมาณการที่สามารถพิสูจน์ได้อย่างง่ายดายว่าไม่สอดคล้องกับสถิติ ความคิดใด ๆ การตรวจสอบเบื้องต้นและรายละเอียดเพิ่มเติม จากคำตอบของ Paul ที่นี่ดูเหมือนว่าทั้งฮิวริสติก SQL 2012 และ SQL 2014 สำหรับการประเมิน cardinality ที่เข้าร่วมควรจัดการสถานการณ์ที่ฮิสโทแกรมที่เหมือนกันทั้งสองต้องเปรียบเทียบได้ง่าย ฉันเริ่มต้นด้วยผลลัพธ์จากการตั้งค่าสถานะการสืบค้นกลับ 2363 แต่ไม่สามารถเข้าใจได้อย่างง่ายดาย ตัวอย่างต่อไปนี้หมายความว่า SQL Server เปรียบเทียบฮิสโตแกรมสำหรับfIdและbIdเพื่อประเมินการเลือกของการเข้าร่วมที่ใช้เท่านั้นfIdหรือไม่ ถ้าเป็นเช่นนั้นแน่นอนว่าจะไม่ถูกต้อง หรือฉันกำลังอ่านเอาต์พุตแฟล็กการติดตามผิด? Plan for computation: CSelCalcExpressionComparedToExpression( QCOL: [ar].fId x_cmpEq QCOL: …

4
ทำไมค่าใช้จ่ายโดยประมาณของ (เหมือนกัน) 1,000 ค้นหาในดัชนีที่ไม่ซ้ำกันแตกต่างกันในแผนเหล่านี้
ในแบบสอบถามด้านล่างแผนการดำเนินการทั้งคู่คาดว่าจะทำการค้นหา 1,000 ครั้งในดัชนีที่ไม่ซ้ำกัน การค้นหาถูกขับเคลื่อนโดยการสแกนที่สั่งในตารางแหล่งเดียวกันดังนั้นดูเหมือนว่าควรจะจบลงด้วยการค้นหาค่าเดียวกันในลำดับเดียวกัน ทั้งลูปซ้อนกันมี <NestedLoops Optimized="false" WithOrderedPrefetch="true"> ใครรู้ว่าทำไมงานนี้มีราคาอยู่ที่ 0.172434 ในแผนแรก แต่ 3.01702 ต่อวินาที (เหตุผลของคำถามคือคำถามแรกที่เสนอให้ฉันเป็นการเพิ่มประสิทธิภาพเนื่องจากราคาแผนต่ำกว่ามากจริง ๆ แล้วดูเหมือนว่าฉันจะทำงานได้มากกว่า แต่ฉันพยายามอธิบายความแตกต่าง .. .) ติดตั้ง CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER …

2
เหตุใดฟังก์ชัน LEN () จึงประเมินค่าความสำคัญต่ำใน SQL Server 2014
ฉันมีตารางที่มีคอลัมน์สตริงและเพรดิเคตที่ตรวจสอบแถวที่มีความยาวแน่นอน ใน SQL Server 2014 ฉันเห็นการประมาณ 1 แถวโดยไม่คำนึงถึงความยาวที่ฉันกำลังตรวจสอบ นี่เป็นแผนที่แย่มากเพราะมีหลายพันหรือหลายล้านแถวและ SQL Server เลือกที่จะวางตารางนี้ไว้ที่ด้านนอกของลูปที่ซ้อนกัน มีคำอธิบายสำหรับการประมาณค่า cardinality ที่ 1.0003 สำหรับ SQL Server 2014 หรือไม่ในขณะที่ SQL Server 2012 ประมาณ 31,622 แถว มีวิธีแก้ปัญหาที่ดีหรือไม่? นี่คือการทำซ้ำสั้น ๆ ของปัญหา: -- Create a table with 1MM rows of dummy data CREATE TABLE #customers (cust_nbr VARCHAR(10) NOT NULL) GO INSERT …

4
บันทึกธุรกรรมสำหรับฐานข้อมูล 'database_name' เต็มเนื่องจาก 'XTP_CHECKPOINT'
XTP_CHECKPOINTฉันมีคำถามเกี่ยวกับ ฉันใช้ SQL Server 2014 ฉันมีฐานข้อมูลที่อยู่ในโหมดรูปแบบการกู้คืนที่เรียบง่าย มันยังถูกทำซ้ำ ไม่มีธุรกรรมที่เปิดอยู่ ฉันวิ่งDBCC OPENTRANแล้วมันกลับมา: "ไม่มีธุรกรรมเปิดค้างอยู่" แต่ฉันได้รับข้อความนี้ทุกครั้งที่ฉันพยายามสร้างหรือวางตารางหรือลบข้อมูล: (ฉันได้แทนที่ชื่อฐานข้อมูลจริงด้วยคำว่าdatabase_name) "บันทึกธุรกรรมสำหรับฐานข้อมูล 'database_name' เต็มเนื่องจาก 'XTP_CHECKPOINT'" ไม่มีใครรู้ว่าทำไมสิ่งนี้จึงเกิดขึ้นและที่สำคัญฉันจะทำให้มันหยุดได้อย่างไร และใช่ฐานข้อมูลอยู่ในโหมดการกู้คืนแบบง่าย ie บันทึกธุรกรรมควรตัดโดยอัตโนมัติ บังเอิญฐานข้อมูลอื่นที่ฉันมีในโหมดการกู้คืนเต็มทำสิ่งเดียวกันเริ่มกลับข้อผิดพลาดเดียวกัน: บันทึกธุรกรรมสำหรับฐานข้อมูล 'database_name' เต็มเนื่องจาก 'XTP_CHECKPOINT' ฉันพยายามเปลี่ยนการตั้งค่าการเติบโตบันทึกเป็นการเติบโตแบบไม่ จำกัด แต่จะไม่ให้ฉันกลับข้อผิดพลาดเดียวกัน ฉันสามารถทำซ้ำปัญหาโดยไม่มีสิ่ง XTP ใด ๆ เลยยกเว้นเฉพาะกลุ่มไฟล์ นี่คือวิธี: http://pastebin.com/jWSiEU9U

2
Cardinality Estimate สำหรับผู้ประกอบการ LIKE (ตัวแปรท้องถิ่น)
ฉันรู้สึกว่าเมื่อใช้ตัวLIKEดำเนินการในการปรับให้เหมาะสมสำหรับสถานการณ์ที่ไม่รู้จักทั้งมรดกและ CE ใหม่ใช้ประมาณการ 9% (สมมติว่ามีสถิติที่เกี่ยวข้องพร้อมใช้งานและเครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่จำเป็นต้องคาดเดาการเลือก) เมื่อดำเนินการค้นหาด้านล่างกับฐานข้อมูลเครดิตฉันได้รับการประมาณการที่แตกต่างกันภายใต้ CE ที่แตกต่างกัน ภายใต้ CE ใหม่ฉันได้รับการประมาณ 900 แถวซึ่งฉันคาดหวังภายใต้ CE ดั้งเดิมฉันได้รับการประมาณ 241.416 และฉันไม่สามารถทราบได้ว่าการประเมินนี้มาจากอะไร มีใครสามารถที่จะหลั่งน้ำตาแสงใด ๆ ? -- New CE (Estimate = 900) DECLARE @LastName VARCHAR(15) = 'BA%' SELECT * FROM [Credit].[dbo].[member] WHERE [lastname] LIKE @LastName; -- Forcing Legacy CE (Estimate = 241.416) DECLARE @LastName VARCHAR(15) = …

1
เหตุใดคำสั่ง MERGE นี้จึงทำให้เซสชันถูกฆ่า
ฉันมีMERGEคำสั่งด้านล่างซึ่งออกกับฐานข้อมูล: MERGE "MySchema"."Point" AS t USING ( SELECT "ObjectId", "PointName", z."Id" AS "LocationId", i."Id" AS "Region" FROM @p1 AS d JOIN "MySchema"."Region" AS i ON i."Name" = d."Region" LEFT JOIN "MySchema"."Location" AS z ON z."Name" = d."Location" AND z."Region" = i."Id" ) AS s ON s."ObjectId" = t."ObjectId" WHEN NOT …

1
การเสียหายของดัชนีเชิงพื้นที่ที่ไม่สามารถแก้ไขได้ถือว่าเป็นเรื่องปกติหรือไม่
ฉันมีดัชนีเชิงพื้นที่ซึ่งDBCC CHECKDBรายงานความเสียหาย: DBCC CHECKDB(MyDB) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS ดัชนีเชิงพื้นที่ดัชนี XML หรือมุมมองที่จัดทำดัชนี 'sys.extended_index_xxx_384000' (ID วัตถุ xxx) ไม่มีแถวทั้งหมดที่นิยามมุมมองสร้างขึ้น สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้ ดัชนีปริภูมิดัชนี XML หรือมุมมองที่จัดทำดัชนี 'sys.extended_index_xxx_384000' (ID อ็อบเจ็กต์ xxx) มีแถวที่ไม่ได้สร้างขึ้นโดยการกำหนดมุมมอง สิ่งนี้ไม่จำเป็นต้องแสดงถึงปัญหาด้านความสมบูรณ์ของข้อมูลในฐานข้อมูลนี้ CHECKDB พบข้อผิดพลาดในการจัดสรร 0 ข้อและข้อผิดพลาดที่สอดคล้องกัน 2 ข้อในตาราง 'sys.extended_index_xxx_384000' (รหัสวัตถุ xxx) repair_rebuildระดับการซ่อมเป็น การปล่อยและสร้างดัชนีใหม่จะไม่ลบรายงานความเสียหายเหล่านี้ หากไม่มีEXTENDED_LOGICAL_CHECKSแต่ด้วยDATA_PURITYข้อผิดพลาดจะไม่ถูกรายงาน นอกจากนี้CHECKTABLEใช้เวลา 45 นาทีสำหรับตารางนี้แม้ว่า CI ของมันจะมีขนาด 30 MB และมีแถวประมาณ 30k ข้อมูลทั้งหมดในตารางนั้นเป็นgeographyข้อมูลจุด …

3
คำเตือนสำหรับสถิติที่ขาดหายไปในแผนการดำเนินการ
ฉันมีสถานการณ์ที่ฉันไม่เข้าใจ แผนการดำเนินการของ SQL Server ของฉันบอกฉันว่าฉันไม่มีสถิติในตาราง แต่สถิติถูกสร้างขึ้นแล้ว: แต่ถ้าเราดูที่โต๊ะเราจะเห็นว่ามีสถิติที่สร้างขึ้นโดยอัตโนมัติ: บางคนสามารถช่วยให้เข้าใจว่าเป็นอย่างไร Auto_Update และ Auto_Create เปิดสถิติในฐานข้อมูลปัจจุบัน ฉันใช้ SQL Server 2014

1
ทำไมดัชนีที่ไม่ได้จัดกลุ่มของฉันใช้พื้นที่มากขึ้นเมื่อฉันลบแถว
ฉันมีตารางขนาดใหญ่ที่มี 7.5 พันล้านแถวและ 5 ดัชนี เมื่อฉันลบประมาณ 10 ล้านแถวฉันสังเกตว่าดัชนีที่ไม่ได้จัดกลุ่มดูเหมือนจะเพิ่มจำนวนหน้าเว็บที่เก็บไว้ ฉันเขียนแบบสอบถามdm_db_partition_statsเพื่อรายงานความแตกต่าง (หลัง - ก่อน) ในหน้า: ดัชนี1เป็นดัชนีคลัสเตอร์ดัชนี2เป็นคีย์หลัก ส่วนอื่น ๆ นั้นไม่เป็นแบบคลัสเตอร์และไม่ซ้ำใคร เหตุใดหน้าต่างๆจึงเพิ่มขึ้นสำหรับดัชนีที่ไม่ใช่คลัสเตอร์เหล่านั้น ฉันคาดว่าตัวเลขจะแย่ที่สุดเหมือนกัน ฉันเห็นเคาน์เตอร์วัดประสิทธิภาพรายงานการเพิ่มขึ้นของการแยกหน้าระหว่างการลบ เมื่อลบแล้วระเบียนผีต้องย้ายไปหน้าอื่นหรือไม่ สิ่งนี้เกี่ยวข้องกับ "ตัวระบุเฉพาะ" หรือไม่ เรากำลังอยู่ระหว่างการเปิดตัว RCSI แต่ตอนนี้ RCSI ปิดอยู่ มันเป็นโหนดหลักในกลุ่มความพร้อมใช้งาน ฉันรู้ว่าสแน็ปช็อตนั้นใช้กับคนที่สอง ฉันจะแปลกใจถ้านั่นเกี่ยวข้อง ฉันวางแผนที่จะขุดลงในนี้ (ดูผลลัพธ์หน้า dbcc) เพื่อเรียนรู้เพิ่มเติม หวังว่าจะมีบางคนเห็นสิ่งที่คล้ายกัน

2
เป็นไปได้หรือไม่ที่จะบังคับให้เครื่องมือเพิ่มประสิทธิภาพกำจัดตารางที่ไม่เกี่ยวข้องในมุมมองที่แบ่งพาร์ติชันนี้
ฉันกำลังทดสอบสถาปัตยกรรมที่แตกต่างกันสำหรับตารางขนาดใหญ่และข้อเสนอแนะอย่างหนึ่งที่ฉันเห็นคือใช้มุมมองที่แบ่งพาร์ติชันโดยที่ตารางขนาดใหญ่จะแบ่งออกเป็นชุดที่มีขนาดเล็กลง 1 , 2 , 3 , 4 ในการทดสอบวิธีการนี้ฉันได้ค้นพบบางสิ่งที่ไม่สมเหตุสมผลสำหรับฉัน เมื่อฉันกรอง "การแบ่งคอลัมน์" ในมุมมองข้อเท็จจริงเครื่องมือเพิ่มประสิทธิภาพจะค้นหาเฉพาะในตารางที่เกี่ยวข้องเท่านั้น นอกจากนี้หากฉันกรองคอลัมน์นั้นบนตารางมิติเครื่องมือเพิ่มประสิทธิภาพจะกำจัดตารางที่ไม่จำเป็น อย่างไรก็ตามถ้าฉันกรองส่วนอื่น ๆ ของมิติตัวเพิ่มประสิทธิภาพจะค้นหา PK / CI ของแต่ละตารางพื้นฐาน นี่คือคำถามที่ถาม: select od.[Year], AvgValue = avg(ObservationValue) from dbo.v_Observation o join dbo.ObservationDates od on o.ObservationDateKey = od.DateKey where o.ObservationDateKey >= 20000101 and o.ObservationDateKey <= 20051231 group by od.[Year]; select od.[Year], AvgValue …

1
สิ่งใดที่ SQL Server 2014 สามารถใช้งานได้ในโหมดแบตช์
เมื่อมีการใช้ดัชนี columnstore ในแบบสอบถาม SQL Server จะสามารถใช้โหมดแบตช์ เอกสารมีความบางในสิ่งที่สามารถทำงานในโหมดแบทช์และสิ่งที่ไม่สามารถทำได้ โปรดดูแผนแบบสอบถาม (สร้างแรงบันดาลใจ) ต่อไปนี้ซึ่งมีสิ่งน่าแปลกใจจำนวนหนึ่งที่ดำเนินการในโหมดแบทช์ (สีเขียว) (นี่เป็นแผนโดยประมาณฉันใช้แผนจริงเพื่อตรวจสอบว่าโหมดการปฏิบัติจริงเป็นแบทช์จริง ๆ ) โปรดทราบว่าเฉพาะด้านบิลด์ของ T1 เท่านั้นที่ใช้ดัชนี columnstore โพรบอินพุตทั้งหมด (T2 และ T3) เป็นแถว ข้อมูลของพวกเขาดูเหมือนจะเปลี่ยนเป็นโหมดแบทช์ ฉันคิดเสมอว่ามีการใช้งานโหมดแบตช์สำหรับกระแสข้อมูลที่ไหลผ่านด้านโพรบเท่านั้น ดูเหมือนว่าข้อมูลสามารถเปลี่ยนเป็นโหมดแบตช์แม้ว่าจะไม่ได้มาจากดัชนีของคอลัมน์ นั่นทำให้เกิดคำถาม: ทำไม SQL Server ถึงไม่ใช้โหมดแบตช์สำหรับการสืบค้นแบบแถวเรียงเท่านั้นเช่นกัน อาจเป็นประโยชน์สำหรับบางคน การใช้ดัชนี columnstore เป็นข้อกำหนดอย่างเป็นทางการที่จำเป็นเพื่อให้ SQL Server พิจารณาโหมดแบตช์หรือไม่ เราอาจจะเพิ่มตารางดัมมี่แถวศูนย์ด้วยดัชนีแบบคอลัมน์เพื่อกระตุ้นโหมดแบทช์และรับประสิทธิภาพที่เพิ่มขึ้นได้หรือไม่? สิ่งที่สามารถทำงานในโหมดแบตช์ในฐานะของ SQL Server 2014 ได้อย่างแน่นอน

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