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

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

2
ฉันควรใช้ UUID เช่นเดียวกับ ID
ฉันใช้ UUID ในระบบของฉันมาระยะหนึ่งแล้วด้วยเหตุผลหลายประการตั้งแต่การบันทึกไปจนถึงความสัมพันธ์ที่ล่าช้า รูปแบบที่ฉันใช้เปลี่ยนไปเมื่อฉันไร้เดียงสาน้อยลงจาก: VARCHAR(255) VARCHAR(36) CHAR(36) BINARY(16) เมื่อฉันไปถึงขั้นสุดท้ายBINARY(16)ที่ฉันเริ่มเปรียบเทียบประสิทธิภาพกับจำนวนเต็มพื้นฐานที่เพิ่มขึ้นอัตโนมัติ การทดสอบและผลลัพธ์แสดงไว้ด้านล่าง แต่ถ้าคุณต้องการสรุปก็แสดงว่าINT AUTOINCREMENTและBINARY(16) RANDOMมีประสิทธิภาพเหมือนกันในช่วงข้อมูลสูงสุด 200,000 (ฐานข้อมูลถูกเติมข้อมูลล่วงหน้าก่อนการทดสอบ) ตอนแรกฉันสงสัยว่าจะใช้ UUID เป็นคีย์หลักและแน่นอนฉันก็ยังอยู่ แต่ฉันเห็นศักยภาพที่นี่เพื่อสร้างฐานข้อมูลที่ยืดหยุ่นที่สามารถใช้ทั้งสองได้ ในขณะที่หลายคนเครียดกับข้อได้เปรียบของทั้งสองข้อเสียอะไรที่ถูกยกเลิกโดยการใช้ข้อมูลทั้งสองชนิด? PRIMARY INT UNIQUE BINARY(16) กรณีการใช้งานสำหรับการตั้งค่าประเภทนี้จะเป็นคีย์หลักดั้งเดิมสำหรับความสัมพันธ์ระหว่างตารางโดยมีตัวระบุเฉพาะที่ใช้สำหรับความสัมพันธ์ระหว่างระบบ สิ่งที่ฉันพยายามค้นพบเป็นหลักคือประสิทธิภาพที่แตกต่างระหว่างสองแนวทาง นอกเหนือจากพื้นที่ดิสก์สี่เท่าที่ใช้ซึ่งอาจเล็กน้อยมากหลังจากเพิ่มข้อมูลเพิ่มเติมพวกเขาดูเหมือนจะเหมือนกัน schema: -- phpMyAdmin SQL Dump -- version 4.0.10deb1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Sep 22, 2015 at 10:54 AM …

3
MySQL: การเข้าร่วมใดดีกว่าระหว่างการเข้าร่วมด้านนอกด้านซ้ายและการเข้าร่วมภายใน
การเข้าร่วมใดจะดีกว่าการแสดงผลหากพวกเขาทั้งหมดให้ผลลัพธ์เดียวกัน ตัวอย่างเช่นผมมีสองตารางและemployees(emp_id,name, address, designation, age, sex) work_log(emp_id,date,hours_wored)เพื่อให้ได้ผลลัพธ์ที่เฉพาะเจาะจงทั้งสองinner joinและleft joinให้ผลลัพธ์เดียวกัน แต่ฉันยังมีข้อสงสัยบางอย่างที่ไม่ จำกัด เฉพาะคำถามนี้เท่านั้น การเข้าร่วมใดที่มีประสิทธิภาพมากกว่าซึ่งควรเลือกในกรณีที่มีค่าผลลัพธ์เดียวกัน ปัจจัยอื่น ๆ ที่ต้องพิจารณาในเวลาที่สมัครเข้าร่วมมีอะไรบ้าง มีความสัมพันธ์ระหว่างการเข้าร่วมภายในกับการเข้าร่วมไขว้ไหม?

4
การใช้งาน CPU สูงบนเซิร์ฟเวอร์ SQL - คิวรีช้า [ปิด]
คำถามนี้ไม่น่าจะช่วยผู้เข้าชมในอนาคต มันเกี่ยวข้องเฉพาะกับพื้นที่ทางภูมิศาสตร์ขนาดเล็กช่วงเวลาที่เฉพาะเจาะจงหรือสถานการณ์ที่แคบเป็นพิเศษซึ่งโดยทั่วไปไม่สามารถใช้ได้กับผู้ชมทั่วโลกของอินเทอร์เน็ต สำหรับความช่วยเหลือในการทำคำถามนี้มากขึ้นบังคับในวงกว้างไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน6 ปีที่ผ่านมา MS SQL Server ของเราใช้ซีพียูประมาณ 95% หลังจากรีสตาร์ทเซิร์ฟเวอร์ (ฮาร์ดแวร์) หรือรีสตาร์ท SQL-Service การใช้งานจะเป็น 0% และจะเพิ่มขึ้นอย่างช้า ๆ ในระยะเวลา 1-3 วัน ขึ้นอยู่กับว่ามีการใช้งานเท่าใด เมื่อเกิน 80% ทุกคำถามจะช้ามาก เว็บไซต์ของเราจัดการกับข้อความค้นหาจำนวนมากดังนั้นบางรายการใช้เวลา 45-60 วินาที หลังจากรีสตาร์ท (การใช้งาน CPU น้อยกว่า 80%) จะใช้เวลา 11-20 วินาทีในการค้นหาเดียวกัน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันได้อ่านออนไลน์แล้วที่ affinity masks สามารถปรับการใช้งาน CPU แต่การตั้งค่า Affinity ถูกปิดใช้งาน ฉันไม่สามารถเปลี่ยนได้ เป็นเพราะฉันมีเพียง 1 โปรเซสเซอร์หรือไม่ มีเคล็ดลับมากมายเกี่ยวกับข้อความค้นหาด้วยตนเอง …

3
ประสิทธิภาพที่แย่ลงบนเซิร์ฟเวอร์ใหม่
เราอยู่บนเซิร์ฟเวอร์เฉพาะ (quad-core เดียว, RAM 6 GB) และกำลังย้ายไปยังเซิร์ฟเวอร์เฉพาะใหม่ (2x hex-core, 32 GB RAM) ทั้งสองเป็น Windows Server 2008, SQL Server 2008 ประสิทธิภาพการทำงานบนเซิร์ฟเวอร์ใหม่นั้นแย่กว่าเซิร์ฟเวอร์เก่าที่ช้ากว่าเล็กน้อย ในการทดสอบแอปพลิเคชัน ASP.NET ของเราทำงานช้าลง 10 - 20% การเรียกใช้ข้อความค้นหาราคาแพงทีละรายการด้วยสถิติ IO และสถิติเวลาแสดงเวลาที่ผ่านไปมากกว่า 10 - 20% บนเซิร์ฟเวอร์ใหม่ โปรไฟล์การสืบค้นข้อมูล SQL แสดงการใช้งาน CPU ที่สูงขึ้นสำหรับการสืบค้นที่มีราคาแพง ตัวจัดการงานบนเซิร์ฟเวอร์ใหม่แสดงให้เห็นว่า sqlserver.exe ใช้ RAM ขนาด 22 GB แต่ค่าของ CPU ยังคงต่ำอยู่เสมอ ฉันได้อัปเดตสถิติทั้งหมดสร้างใหม่หรือจัดดัชนีใหม่ ฯลฯ …

2
ช้าสั่งซื้อด้วย LIMIT
ฉันมีคำถามนี้: SELECT * FROM location WHERE to_tsvector('simple',unaccent2("city")) @@ to_tsquery('simple',unaccent2('wroclaw')) order by displaycount ฉันมีความสุขกับมัน: "Sort (cost=3842.56..3847.12 rows=1826 width=123) (actual time=1.915..2.084 rows=1307 loops=1)" " Sort Key: displaycount" " Sort Method: quicksort Memory: 206kB" " -> Bitmap Heap Scan on location (cost=34.40..3743.64 rows=1826 width=123) (actual time=0.788..1.208 rows=1307 loops=1)" " Recheck Cond: (to_tsvector('simple'::regconfig, unaccent2((city)::text)) …

2
ประสิทธิภาพของทริกเกอร์ vs ขั้นตอนการจัดเก็บใน MySQL
โพสต์ที่นี่ใน DBA.StackExchange ( อะไรคือแนวทางปฏิบัติที่ดีที่สุดสำหรับทริกเกอร์เพื่อรักษาหมายเลขการแก้ไขเรคคอร์ด? ) ทำให้เกิดคำถามที่น่าสนใจ (อย่างน้อยก็น่าสนใจสำหรับฉัน) เกี่ยวกับประสิทธิภาพใน MySQL บริบทคือเราต้องการแทรกระเบียนในตารางสำหรับแต่ละแถวที่มีการปรับปรุง ก่อนที่จะอัปเดตแถวเราต้องการเก็บค่าก่อนหน้าจากนั้นเพิ่มหนึ่งในคอลัมน์ (คอลัมน์ "รุ่น") หากเราทำสิ่งนี้ภายในทริกเกอร์มันจะทำงานได้ดี สำหรับ MySQL ทริกเกอร์เป็นแบบทีละแถวดังนั้นมันจึงเป็นทางออกที่ง่าย เลือกข้อมูลในตารางปัจจุบันแทรกลงในตารางการบันทึกและอัปเดตคอลัมน์ "version" ในข้อมูลใหม่ อย่างไรก็ตามเป็นไปได้ที่จะย้ายตรรกะนี้ไปยังกระบวนงานที่เก็บไว้ หากคุณทำเช่นนั้นคุณกำลังทำการแทรกแล้วเพิ่มคอลัมน์ "รุ่น" ในตาราง สิ่งทั้งหมดจะถูกตั้งค่าตาม ดังนั้นเมื่อมันมาถึงการแทรกนี้นี้จะมีประสิทธิภาพมากกว่าที่จะใช้วิธีการจัดเก็บตามชุดหรือวิธีการตามทริกเกอร์? คำถามนี้มีไว้สำหรับ MySQL (เนื่องจากมีทริกเกอร์แบบทีละแถว) แม้ว่าจะสามารถนำไปใช้กับ DBMS ทริกเกอร์แบบแถวต่อแถวอื่น ๆ ได้

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

1
สิ่งที่เป็นประโยชน์ของการตั้งค่า ARITHABORT ON สำหรับการเชื่อมต่อทั้งหมดใน SQL Server?
ดังนั้นผมจึงได้พิจารณาแล้วว่าพฤติกรรมผิดปกติของ SQL Server ของฉันคือเนื่องจากการตั้งค่าเริ่มต้นของผู้ให้บริการสุทธิ SqlClient SET ARITHABORT OFFข้อมูลของ ด้วยที่กล่าวว่าฉันได้อ่านบทความต่าง ๆ ที่ถกเถียงวิธีที่ดีที่สุดในการใช้งาน สำหรับฉันฉันแค่ต้องการวิธีที่ง่ายเพราะ SQL Server กำลังทนทุกข์และการปรับแต่งการสืบค้นของฉันยังไม่ได้มีการข้ามผ่านแอพอย่างสมบูรณ์ (และแน่นอนว่าการเพิ่มSETใน sp ไม่ทำงาน) ในบทความยอดเยี่ยมเกี่ยวกับหัวข้อของ Erland Sommarskog เขาแนะนำให้ใช้วิธีการที่ปลอดภัยโดยการเปลี่ยนแอพให้เป็นปัญหาSET ARITHABORT ONสำหรับการเชื่อมต่อ อย่างไรก็ตามในคำตอบนี้จากคำถาม dba.stackexchange โซโลมอน Rutzky เสนอวิธีการแบบกว้างและแบบฐานข้อมูล ฉันหายไปที่นี่โดยการตั้งค่าทั้งอินสแตนซ์นี้ได้อย่างไร ตามที่ฉันเห็น ... เนื่องจาก SSMS มีการตั้งค่านี้ONตามค่าเริ่มต้นฉันไม่เห็นอันตรายใด ๆ ในการตั้งค่าทั้งONเซิร์ฟเวอร์สำหรับการเชื่อมต่อทั้งหมด ในตอนท้ายของวันฉันแค่ต้องการ SQL Server นี้เพื่อดำเนินการเหนือสิ่งอื่นใด

1
เพิ่มประสิทธิภาพการค้นหา 'ล่าสุด' ใน Postgres บนแถว 20M
ตารางของฉันมีลักษณะดังนี้: Column | Type | -----------------------+-------------------+ id | integer | source_id | integer | timestamp | integer | observation_timestamp | integer | value | double precision | มีดัชนีอยู่ใน source_id, การประทับเวลาและในคอมโบของการประทับเวลาและรหัส ( CREATE INDEX timeseries_id_timestamp_combo_idx ON timeseries (id, timeseries DESC NULLS LAST)) มีแถวอยู่ 20M (ตกลงมี 120M แต่ 20M กับ source_id = …

2
ทุกชุดทำให้เกิดการคอมไพล์
เรามีแอปพลิเคชันบุคคลที่สามที่ส่งคำสั่ง T-SQL เป็นชุด ฐานข้อมูลโฮสต์อยู่ใน SQL Server 2016 Enterprise SP1 CU7, 16 คอร์และหน่วยความจำ 256GB เปิดใช้งานการปรับให้เหมาะสมที่สุดสำหรับ Ad-Hoc นี่เป็นตัวอย่างของการสอบถามที่กำลังดำเนินการ: exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, …

3
เหตุใดจึงตั้งค่าสถิติการอัปเดตอัตโนมัติเป็นเท็จ
ฉันเพิ่งได้รับ SQL Server ประมาณ 20 อินสแตนซ์ซึ่งเป็นส่วนหนึ่งของโครงการการได้มาที่กว้างขึ้น ฉันอยู่ระหว่างการประเมินประสิทธิภาพและฉันไม่ชอบวิธีการบำรุงรักษาตามแผนการที่วางไว้ ฉันเห็นดัชนีแบบครอบคลุมรายวันสร้างใหม่ (ฉันสามารถจัดการกับสิ่งนี้ได้) และการอัปเดตสถิติรายวันด้วยตนเอง ประมาณครึ่งหนึ่งของฐานข้อมูลได้รับการตั้งค่าเป็นสถิติการอัพเดทอัตโนมัติ = เท็จด้วยเหตุผลที่ไม่ชัดเจนนอกเหนือจากที่ฉันบอกก็คือการลด 'ปัญหาประสิทธิภาพ' ... ฉันมักจะคิดและทำงานเพื่อตั้งค่านี้เป็น True และรู้สึกว่าการปรับปรุงด้วยตนเองไม่จำเป็นถ้าการตั้งค่านี้เป็นจริง ฉันผิดหรือเปล่า? ทุกคนสามารถอธิบายได้ว่าประโยชน์ที่จะได้รับในการตั้งค่านี้เป็นเท็จ แต่ทำการอัพเดทด้วยตนเองทุกวันแทนหรือไม่ ฉันควรพูดถึงว่าฐานข้อมูลบางส่วนนั้นมีการทำธุรกรรมสูง (มีการแทรกการลบการอัปเดตต่อวันเป็นจำนวนมาก) อื่น ๆ มีอัตราการทำธุรกรรมต่ำและบางรายการเป็นแบบอ่านอย่างเดียว ไม่มีการสัมผัสหรือเหตุผลว่าการตั้งค่าการอัปเดตอัตโนมัติเป็นเท็จ ดูเหมือนจะเป็นลอตเตอรี

3
แอปพลิเคชันสอบถามตารางที่ว่างเปล่า
บริษัท ของฉันใช้แอปพลิเคชันที่มีปัญหาด้านประสิทธิภาพที่สำคัญ มีปัญหาหลายอย่างเกี่ยวกับฐานข้อมูลของตัวเองซึ่งฉันกำลังอยู่ในขั้นตอนการทำงาน แต่มีปัญหามากมายที่เกี่ยวข้องกับการใช้งานอย่างแท้จริง ในการตรวจสอบของฉันฉันพบว่ามีล้านแบบสอบถามกดปุ่มฐานข้อมูล SQL Server ซึ่งแบบสอบถามตารางที่ว่างเปล่า เรามีตารางว่างเปล่าประมาณ 300 ตารางและบางตารางมีการสอบถามถึง 100-200 ครั้งต่อนาที ตารางไม่มีส่วนเกี่ยวข้องกับธุรกิจของเราและเป็นส่วนหนึ่งของแอปพลิเคชันดั้งเดิมซึ่งผู้ขายไม่ได้ลบเมื่อ บริษัท ของฉันทำสัญญาเพื่อผลิตโซลูชันซอฟต์แวร์สำหรับเรา นอกเหนือจากข้อเท็จจริงที่ว่าเราสงสัยว่าบันทึกข้อผิดพลาดแอปพลิเคชันของเรากำลังถูกน้ำท่วมด้วยข้อผิดพลาดที่เกี่ยวข้องกับปัญหานี้ผู้จัดจำหน่ายมั่นใจกับเราว่าไม่มีประสิทธิภาพหรือเสถียรภาพด้านผลกระทบสำหรับทั้งแอปพลิเคชันหรือเซิร์ฟเวอร์ฐานข้อมูล บันทึกข้อผิดพลาดมีน้ำท่วมจนเราไม่สามารถเห็นข้อผิดพลาดเกินกว่า 2 นาทีในการวินิจฉัย ค่าใช้จ่ายจริงของข้อความค้นหาเหล่านี้เห็นได้ชัดว่าอยู่ในระดับต่ำในแง่ของรอบการทำงานของ CPU เป็นต้น แต่ใครก็ตามสามารถแนะนำสิ่งที่มีผลต่อ SQL Server และแอปพลิเคชันได้บ้าง ฉันสงสัยว่ากลไกที่แท้จริงของการส่งคำขอยืนยันดำเนินการส่งคืนและยอมรับการรับแอปพลิเคชันนั้นจะส่งผลกระทบต่อประสิทธิภาพการทำงาน เราใช้ SQL Server 2008 R2, Oracle Weblogic 11g สำหรับแอป @ Frisbee- เรื่องสั้นสั้นฉันสร้างตารางที่มี querytext ซึ่งตีตารางที่ว่างเปล่าในฐานข้อมูลของแอพจากนั้นทำการสอบถามสำหรับ tablenames ทั้งหมดที่ฉันรู้ว่าว่างเปล่าและมีรายการที่ยาวมาก สิ่งที่ฮิตที่สุดคือการประหารชีวิต 2.7 ล้านครั้งในช่วงเวลา 30 วันโดยคำนึงถึงแอปที่ใช้กันทั่วไป 8 …

1
ทำไม Azure SQL Server ของฉันช้าจัง
ขณะนี้เรามี VM ที่มีความสามารถต่ำมากและกำลังเสนอให้ย้ายไปยัง Azure VM ที่มีสเปคที่ดีกว่า ปัญหาคือ Azure VM ช้ากว่า VM ดั้งเดิมมากถึงแม้ว่ามันจะเป็นสเป็คที่สูงกว่าก็ตาม เซิร์ฟเวอร์ดั้งเดิมคือ VM แบบ 2 คอร์ที่มีหน่วยความจำ 2GB ซึ่งเป็นเว็บเซิร์ฟเวอร์ มันรัน Microsoft SQL Server Web Edition 2008 R2 และเนื่องจากเซิร์ฟเวอร์นี้จะใช้สำหรับสิ่งอื่น ๆ ที่เราได้มีการ จำกัด หน่วยความจำเซิร์ฟเวอร์สูงสุดใน SQL Server เพื่อ512MB เซิร์ฟเวอร์ใหม่เป็น VM 4 คอร์ที่มีหน่วยความจำ 7GB ซึ่งเป็นเซิร์ฟเวอร์ฐานข้อมูลเท่านั้น กำลังเรียกใช้ Microsoft SQL Server Standard Edition 2008 R2 และเราไม่ได้ …

2
รับสถิติการสืบค้นที่ทำงานช้า
แอปพลิเคชันฐานข้อมูลของฉันเรียกใช้แบบสอบถามที่แตกต่างกันมากมาย ฉันได้ตั้งไว้log_min_duration_statementที่ 1,000 แต่การสืบค้นที่บันทึกไว้มีไม่ช้าเสมอส่วนใหญ่พวกเขาใช้เวลาเพียงไม่กี่มิลลิวินาที เป็นไปได้หรือไม่ที่จะได้รับสถิติของข้อความค้นหาทั้งหมดและบ่อยครั้งที่พวกเขาใช้เวลานานกว่า 1,000 มิลลิวินาที

3
ประสิทธิภาพการนำเข้า InnoDB
ฉันกำลังดิ้นรนกับการนำเข้าจำนวนมาก InnoDB- ตารางที่มีขนาดประมาณ 10 ล้านแถว (หรือ 7GB) (ซึ่งสำหรับฉันเป็นตารางที่ใหญ่ที่สุดที่ฉันเคยทำงานด้วย) ฉันค้นคว้าวิธีปรับปรุงความเร็วการนำเข้าของ Inno และในขณะที่การติดตั้งของฉันมีลักษณะดังนี้: /etc/mysql/my.cnf/ [...] innodb_buffer_pool_size = 7446915072 # ~90% of memory innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000 innodb_thread_concurrency=0 innodb_doublewrite = 0 innodb_log_file_size = 1G log-bin = "" innodb_autoinc_lock_mode = 2 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit=2 innodb_buffer_pool_instances=8 import is done …

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