คำถามติดแท็ก query-performance

สำหรับคำถามเกี่ยวกับการปรับปรุงประสิทธิภาพและ / หรือประสิทธิภาพของการสืบค้นฐานข้อมูล

3
แบบสอบถาม PostgreSQL ช้ามากเมื่อเพิ่มแบบสอบถามย่อย
ฉันมีแบบสอบถามที่ค่อนข้างง่ายในตารางที่มีแถว 1.5M: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE เอาท์พุท: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 …

3
ใช้คิวรีช้ากับพันล้านแถวตาราง // ดัชนี
เนื่องจากฉันเป็นนักพัฒนาอายุน้อยและไม่ชำนาญในการใช้ฐานข้อมูล (PostgreSQL 9.3) ฉันพบปัญหาบางอย่างเกี่ยวกับโครงการที่ฉันต้องการความช่วยเหลือ โครงการของฉันเกี่ยวกับการรวบรวมข้อมูลจากอุปกรณ์ (มากถึง 1,000 อุปกรณ์ขึ้นไป) ซึ่งทุกอุปกรณ์กำลังส่งข้อมูลหนึ่งบล็อกทุกวินาทีซึ่งจะสร้างประมาณ 3 ล้านแถวต่อชั่วโมง ขณะนี้ฉันมีตารางขนาดใหญ่หนึ่งตารางที่ฉันเก็บข้อมูลขาเข้าของทุกอุปกรณ์: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) เนื่องจากมีข้อมูลหลายประเภทที่บล็อกข้อมูลสามารถ (หรือไม่สามารถ) รวมจึงมีตารางอื่น ๆ ที่อ้างอิงdata_blockตาราง CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id …

2
การปรับประสิทธิภาพในแบบสอบถาม
การค้นหาความช่วยเหลือเพื่อปรับปรุงประสิทธิภาพการสืบค้นนี้ SQL Server 2008 R2 Enterprise , RAM สูงสุด 16 GB, CPU 40, Max Parallelism 4 SELECT DsJobStat.JobName AS JobName , AJF.ApplGroup AS GroupName , DsJobStat.JobStatus AS JobStatus , AVG(CAST(DsJobStat.ElapsedSec AS FLOAT)) AS ElapsedSecAVG , AVG(CAST(DsJobStat.CpuMSec AS FLOAT)) AS CpuMSecAVG FROM DsJobStat, AJF WHERE DsJobStat.NumericOrderNo=AJF.OrderNo AND DsJobStat.Odate=AJF.Odate AND DsJobStat.JobName NOT …

3
ลบล้านแถวออกจากตาราง SQL
ฉันต้องลบมากกว่า 16 ล้านระเบียนจากตารางแถว 221 ล้านและมันจะช้ามาก ฉันขอขอบคุณถ้าคุณแบ่งปันคำแนะนำในการทำโค้ดด้านล่างให้เร็วขึ้น: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable …

2
แผนแบบสอบถามส่วนใหญ่สร้างขึ้นใหม่ใน 4 ชั่วโมงที่ผ่านมา
ฉันมีปัญหากับประสิทธิภาพของฐานข้อมูล SQL Server ของฉัน ฉันได้พบเครื่องมือนี้sp_BlitzCache หลังจากรันคำสั่งฉันได้รับข้อความนี้: คุณมีแผนสร้าง 92.00% ใน 24 ชั่วโมงที่ผ่านมาและสร้างขึ้น 92.00% ใน 4 ชั่วโมงที่ผ่านมา ขณะที่ฉันระบุปัญหา (โดยใช้ SQL Server Profiler ฉันได้ตรวจสอบเหตุการณ์ที่เกิดขึ้นของ StmtRecompile) ฉันสามารถค้นหาข้อความค้นหาแบบเต็มเพียงไม่กี่คำที่สร้างขึ้นมาใหม่บ่อยครั้ง อย่างไรก็ตามข้อความค้นหาแบบเต็มจะแสดงเพียง 5% ของคำค้นหาทั้งหมด คุณมีข้อเสนอแนะอะไรบ้างที่อาจทำให้แผนพักผ่อนที่เหลืออยู่ 87% เป็นไปได้? ฉันมี SQL Server 2012 (รุ่น 11.0.6567.0) แก้ไข: ฉันเพิ่มเคาน์เตอร์วัดประสิทธิภาพแล้ว +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | …

2
การค้นหาไม่ตอบสนองเมื่อเพิ่มสองคอลัมน์
เมื่อฉันเพิ่มสองคอลัมน์ลงในแบบสอบถามที่ฉันเลือกไม่ตอบสนอง nvarchar(2000)ประเภทของคอลัมน์ มันผิดปกติเล็กน้อย เวอร์ชันเซิร์ฟเวอร์ SQL คือ 2014 มีดัชนีหลักเพียงหนึ่งดัชนีเท่านั้น ระเบียนทั้งหมดมีเพียง 1,000 แถว นี่คือแผนการดำเนินการก่อนหน้า ( XML showplan ): แผนการดำเนินการหลังจาก ( XML showplan ): นี่คือแบบสอบถาม: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < …

1
ปัญหาประสิทธิภาพการค้นหา SQL แบบเรียกซ้ำ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน4 ปีที่แล้ว นี่เป็นครั้งที่หกที่ฉันพยายามถามคำถามนี้และมันก็สั้นที่สุดเช่นกัน ความพยายามก่อนหน้านี้ทั้งหมดเกิดจากสิ่งที่คล้ายกับโพสต์บล็อกมากกว่าคำถาม แต่ฉันขอยืนยันกับคุณว่าปัญหาของฉันเป็นจริงมันเป็นเรื่องที่เกี่ยวข้องกับเรื่องใหญ่หนึ่งเรื่องและไม่มีรายละเอียดทั้งหมดที่คำถามนี้มีอยู่ ไม่ชัดเจนว่าปัญหาของฉันคืออะไร ดังนั้นที่นี่ไป ... นามธรรม ฉันมีฐานข้อมูลทำให้สามารถจัดเก็บข้อมูลได้อย่างเป็นธรรมชาติและมีคุณสมบัติที่ไม่ได้มาตรฐานหลายอย่างที่กระบวนการทางธุรกิจของฉันต้องการ คุณสมบัติดังต่อไปนี้: การอัปเดต / ลบแบบไม่ทำลายและไม่ปิดกั้นถูกนำไปใช้ผ่านวิธีแทรกอย่างเดียวซึ่งช่วยให้การกู้คืนข้อมูลและการบันทึกอัตโนมัติ (การเปลี่ยนแปลงแต่ละครั้งจะเชื่อมโยงกับผู้ใช้ที่ทำการเปลี่ยนแปลงนั้น) ข้อมูลหลายตัวแปร (อาจมีข้อมูลเดียวกันหลายรุ่น) สิทธิ์ระดับฐานข้อมูล ความสอดคล้องในที่สุดกับข้อกำหนด ACID และสร้าง / ปรับปรุง / ลบรายการที่ปลอดภัย ความสามารถในการย้อนกลับหรือส่งต่อมุมมองข้อมูลปัจจุบันของคุณไปยังจุดใดก็ได้อย่างรวดเร็ว อาจมีคุณสมบัติอื่น ๆ ที่ฉันลืมพูดถึง โครงสร้างฐานข้อมูล ข้อมูลผู้ใช้ทั้งหมดจะถูกเก็บไว้ในItemsตารางเป็นสตริงที่เข้ารหัส JSON ( ntext) การดำเนินการฐานข้อมูลทั้งหมดดำเนินการผ่านสองขั้นตอนการจัดเก็บGetLatestและInsertSnashotอนุญาตให้ดำเนินการกับข้อมูลคล้ายกับวิธีการที่ GIT ดำเนินการกับไฟล์ต้นฉบับ ข้อมูลผลลัพธ์ถูกเชื่อมโยง (รวมเข้าด้วยกัน) ที่ส่วนหน้าลงในกราฟที่เชื่อมโยงอย่างสมบูรณ์ดังนั้นจึงไม่จำเป็นต้องทำการสืบค้นฐานข้อมูลในกรณีส่วนใหญ่ นอกจากนี้ยังสามารถเก็บข้อมูลในคอลัมน์ SQL ปกติแทนที่จะเก็บไว้ในรูปแบบที่เข้ารหัส …

1
เอาชนะการผสานเข้าร่วม (สแกนดัชนี) ด้วยค่าคีย์เดี่ยวอย่างชัดเจนบนคีย์ต่างประเทศ
เพิ่ม 7/11ปัญหานี้เกิดจากการหยุดชะงักเนื่องจากการสแกนดัชนีระหว่าง MERGE JOIN ในกรณีนี้ธุรกรรมที่พยายามรับ S lock ในดัชนีทั้งหมดที่ตารางหลัก FK แต่ก่อนหน้านี้ธุรกรรมอื่นวาง X lock ไว้ในค่าคีย์ของดัชนี ให้ฉันเริ่มต้นด้วยตัวอย่างเล็ก ๆ (ใช้ TSQL2012 DB จาก 70-461 cource): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) คอลัมน์[custid], [empid], [shipperid]เป็นพารามิเตอร์ที่มีการเชื่อมโยงกัน[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]ตามลำดับ ในแต่ละกรณีเรามีดัชนีคลัสเตอร์ในคอลัมน์ที่อ้างถึงในตาราง parrent ALTER …

3
Postgres ทำการสแกนตามลำดับแทนการสแกนดัชนี
ฉันมีตารางที่มีประมาณ 10 ล้านแถวในนั้นและดัชนีในเขตข้อมูลวันที่ เมื่อฉันลองและแยกค่าที่ไม่ซ้ำกันของเขตข้อมูลที่จัดทำดัชนี Postgres เรียกใช้การสแกนตามลำดับแม้ว่าชุดผลลัพธ์มีเพียง 26 รายการ เหตุใดเครื่องมือเพิ่มประสิทธิภาพจึงเลือกแผนนี้ และฉันจะหลีกเลี่ยงได้อย่างไร จากคำตอบอื่น ๆ ฉันสงสัยว่านี่เกี่ยวข้องกับแบบสอบถามมากเท่ากับดัชนี explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) โครงสร้างตาราง: http=# \d pages Table "public.pages" Column | Type …

2
Simple DELETE แต่แผนการดำเนินการที่ซับซ้อน
เมื่อฉันเรียกใช้การลบนี้: DELETE FROM ETLHeaders WHERE ETLHeaderID < 32465870 ... ลบแถวที่ 39,157 ควรง่ายเพราะจะลบ ETLHeaderID ซึ่งเป็นดัชนีคลัสเตอร์และคีย์หลัก แต่ (ตามแผนการดำเนินการ) ดูเหมือนว่าจะมีการกดปุ่ม 361,190 แถวและใช้ดัชนีอื่น ตารางมีเขตข้อมูลที่มีชนิดข้อมูล XML (ในกรณีที่มีผลต่อการลบนี้) ความคิดใดที่เป็นสาเหตุและวิธีที่ฉันสามารถเร่งความเร็วการลบนี้ แผนการดำเนินการที่นี่: http://sharetext.org/qwDY สคีมาของตารางที่นี่: http://sharetext.org/Vl9j ขอบคุณ

1
SentryOne Plan Explorer นับการอ่านเป็น UDF หรือไม่
ฉันมีคำถามเช่นนี้ select dbo.fn_complexFunction(t.id) from mytable t ในSQL Sentry Plan Explorerฉันสังเกตเห็นว่าฉันต้องเรียกใช้ Get Estimated Plan เพื่อให้ Query Plan รวมถึง UDF เมื่อเรียกใช้ 'รับแผนจริง' จะไม่ปรากฏว่าการอ่านเชิงตรรกะและตัวชี้วัดอื่น ๆ รวมถึงการดำเนินการที่เกิดขึ้นใน UDF ในกรณีเช่นนี้การแก้ปัญหาเพียงอย่างเดียวในการใช้ Profiler คืออะไร

4
สิ่งที่สามารถเพิ่มความเร็วคิวรีแบบสอบถาม SQL?
เมื่อทำการสอบถาม SQL นับ (รวม) สิ่งที่สามารถเพิ่มความเร็วเวลาการดำเนินการในระบบฐานข้อมูล 3 เหล่านี้? ฉันแน่ใจว่าหลายสิ่งหลายอย่างสามารถเร่งความเร็วได้ (ฮาร์ดแวร์สำหรับหนึ่งชิ้น) แต่ฉันเพิ่งเป็นสามเณร DBA ดังนั้นฉันแน่ใจว่าฉันจะได้รับคำตอบที่นี่ ฉันโยกย้ายประมาณ 157 ล้านแถวไปยังฐานข้อมูล SQL Server และแบบสอบถามนี้ใช้เวลานาน แต่ในฐานข้อมูล Netezza ต้นทางของฉันมันใช้เวลาไม่กี่วินาที ตัวอย่างเช่น: เนเตซซ่า 6: SELECT COUNT(*) FROM DATABASENAME..MYTABLE Oracle 11g: SELECT COUNT(*) FROM MYTABLE SQL Server 2012: SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]

1
MySQL: เพิ่มประสิทธิภาพยูเนี่ยนด้วย“ ORDER BY” ในการค้นหาภายใน
ฉันเพิ่งตั้งค่าระบบบันทึกซึ่งประกอบด้วยหลายตารางที่มีเค้าโครงเดียวกัน มีตารางหนึ่งตารางสำหรับแหล่งข้อมูลแต่ละแหล่ง สำหรับโปรแกรมดูบันทึกฉันต้องการ ยูเนี่ยนทุกตารางบันทึก , กรองพวกเขาโดยการบัญชี , เพิ่มคอลัมน์หลอกสำหรับการระบุแหล่งที่มา เรียงพวกเขาโดยเวลา , และจำกัด พวกเขาสำหรับการแบ่งหน้า ตารางทั้งหมดมีเขตข้อมูลที่เรียกzeitpunktว่าเป็นคอลัมน์วันที่ / เวลาที่จัดทำดัชนี ความพยายามครั้งแรกของฉันคือ: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS …

3
ฉันควรใช้อะไร สตริงหรือจำนวนเต็ม 15 ฟิลด์?
ฉันกำลังพัฒนาโปรแกรมติดตามนักเรียนที่ฉันต้องเก็บคะแนนการสอบ 15 ข้อ ฉันสามารถเก็บเครื่องหมายเป็นสตริงและแยกออกเมื่อฉันต้องการเพื่อวัตถุประสงค์เช่นการดำเนินการเกี่ยวกับคณิตศาสตร์ อย่างไรก็ตามฉันต้องการประสิทธิภาพมากที่สุด ไหนดีกว่ากัน เขตข้อมูลสตริงเดียวหรือ 15 แต่ละเขตข้อมูล int?

1
วิธีเพิ่มประสิทธิภาพการค้นหา
ฉันมีโครงสร้างฐานข้อมูลคล้ายกับสิ่งนี้ CREATE TABLE [dbo].[Dispatch]( [DispatchId] [int] NOT NULL, [ContractId] [int] NOT NULL, [DispatchDescription] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Dispatch] PRIMARY KEY CLUSTERED ( [DispatchId] ASC, [ContractId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE …

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