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

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

3
การกำหนดค่า PostgreSQL สำหรับประสิทธิภาพการเขียน
เซิร์ฟเวอร์ PostgreSQL ของฉันหนึ่งโฮสต์หลายฐานข้อมูล (1-3) ที่ได้รับกระแสข้อมูลคงที่ ข้อมูลไม่ได้ถูกจัดโครงสร้างโดยเฉพาะอย่างยิ่งมันเป็นจำนวนเวลาปัจจุบันและความหลากหลายของข้อมูลที่สังเกตสำหรับการทันทีนั้น อัตราข้อมูลค่อนข้างสูง มันทำงานได้ประมาณกิกะไบต์ต่อวันสำหรับฐานข้อมูลหนึ่งประมาณหนึ่งในสิบของฐานข้อมูลอื่น ฉันไม่คาดหวังว่าอัตรานี้จะเพิ่มขึ้น ประสิทธิภาพการอ่านมีความสำคัญต่ำกว่ามากและเป็นที่ยอมรับในปัจจุบัน ในบันทึกฉันมีข้อความนี้: LOG: checkpoints are occurring too frequently (15 seconds apart) HINT: Consider increasing the configuration parameter "checkpoint_segments". ค่านี้ตั้งไว้ที่ 16 pgtuneซึ่งเป็นมารยาทของ การตั้งค่าใดที่ฉันควรพิจารณาเพื่อปรับปรุงประสิทธิภาพการเขียน ฉันต้องการที่จะรักษาความปลอดภัยให้มากที่สุด เมื่อพิจารณาจากปริมาณข้อมูลที่เข้ามาฉันสามารถยอมรับการสูญเสียข้อมูลล่าสุดในความล้มเหลวตราบใดที่ข้อมูลจำนวนมากไม่เสียหาย แก้ไข: ฉันใช้ PostgreSQL 9.0 ในตอนนี้ แต่ฉันวางแผนที่จะอัพเกรดเป็น 9.1 ฉันไม่ได้โพสต์รายละเอียดฮาร์ดแวร์เพราะในขณะที่ฉันรับทราบความสำคัญของพวกเขาในที่สุดฉันจะต้องทำให้การเพิ่มประสิทธิภาพนี้ในหลายเครื่องด้วยฮาร์ดแวร์ที่หลากหลายมาก หากฮาร์ดแวร์มีความสำคัญต่อคำตอบโปรดให้ข้อมูลทั่วไปเพื่อให้ฉันสามารถใช้คำตอบกับเครื่องที่มีการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน

5
DELETE ช้ามากใน PostgreSQL หรือไม่?
ฉันมีฐานข้อมูลบน PostgreSQL 9.2 ที่มีคีมาหลักที่มีประมาณ 70 ตารางและจำนวนตัวแปรของสกีมาต่อไคลเอนต์ที่มีโครงสร้างเหมือนกันจำนวน 30 ตาราง สกีมาไคลเอนต์มีคีย์ต่างประเทศอ้างอิงถึงสกีมาหลักและไม่ใช่วิธีอื่น ๆ ฉันเพิ่งเริ่มเติมฐานข้อมูลด้วยข้อมูลจริงบางอย่างที่นำมาจากเวอร์ชันก่อนหน้า ฐานข้อมูลมาถึงประมาณ 1.5 GB (คาดว่าจะเพิ่มขึ้นเป็น 10s GB ภายในไม่กี่สัปดาห์) เมื่อฉันต้องทำการลบจำนวนมากในตารางกลางในสคีมาหลัก คีย์ต่างประเทศที่เกี่ยวข้องทั้งหมดจะถูกทำเครื่องหมายว่า DELETE CASCADE ไม่แปลกใจเลยว่าจะใช้เวลานาน แต่หลังจากผ่านไป 12 ชั่วโมงก็เห็นได้ชัดว่าฉันเริ่มต้นได้ดีกว่าปล่อย DB และเรียกใช้การย้ายข้อมูลอีกครั้ง แต่ถ้าฉันต้องทำซ้ำการดำเนินการนี้ในภายหลังเมื่อฐานข้อมูลมีชีวิตอยู่และมีขนาดใหญ่ขึ้น? มีวิธีอื่นให้เลือกเร็วกว่านี้ไหม? มันจะเร็วกว่านี้ไหมถ้าฉันเขียนสคริปต์ที่จะเรียกดูตารางที่ขึ้นต่อกันเริ่มต้นที่ตารางที่ไกลที่สุดจากตารางกลางการลบตารางแถวที่อยู่ต่อกันทีละตาราง? รายละเอียดที่สำคัญคือมีทริกเกอร์ในบางตาราง

7
วิธีที่มีประสิทธิภาพที่สุดในการรับจำนวนคอลัมน์ขั้นต่ำใน SQL Server 2005 คืออะไร
ฉันอยู่ในสถานการณ์ที่ฉันต้องการรับค่าต่ำสุดจาก 6 คอลัมน์ ฉันได้พบสามวิธีในการบรรลุเป้าหมายนี้ แต่ฉันมีความกังวลเกี่ยวกับประสิทธิภาพของวิธีการเหล่านี้และต้องการทราบว่าวิธีไหนที่จะดีกว่าสำหรับการแสดง วิธีแรกคือการใช้คำสั่งคดีใหญ่ นี่คือตัวอย่างที่มี 3 คอลัมน์ตามตัวอย่างในลิงก์ด้านบน คำสั่ง case ของฉันจะนานกว่านี้เพราะฉันจะดูที่ 6 คอลัมน์ Select Id, Case When Col1 <= Col2 And Col1 <= Col3 Then Col1 When Col2 <= Col3 Then Col2 Else Col3 End As TheMin From MyTable ตัวเลือกที่สองคือการใช้ประกอบกับงบเลือกหลายUNION ฉันจะใส่สิ่งนี้ใน UDF ที่ยอมรับพารามิเตอร์ Id select Id, dbo.GetMinimumFromMyTable(Id) from MyTable …

4
Do SSD ช่วยลดประโยชน์ของฐานข้อมูล
ฉันเพิ่งได้ยินเกี่ยวกับ Robert Martin วันนี้และดูเหมือนว่าเขาเป็นบุคคลสำคัญในโลกซอฟต์แวร์ดังนั้นฉันไม่ได้ตั้งใจให้ชื่อของฉันปรากฏราวกับว่ามันเป็นเหยื่อคลิกหรือฉันใส่คำเข้าไปในปากของเขา ฉันตีความสิ่งที่ฉันได้ยินจากเขาด้วยประสบการณ์และความเข้าใจที่ จำกัด ของฉันได้อย่างไร ฉันกำลังดูวิดีโอวันนี้ (ในสถาปัตยกรรมซอฟต์แวร์) จากการพูดคุยของ Robert C. Martin และในช่วงครึ่งหลังของวิดีโอหัวข้อของฐานข้อมูลเป็นจุดสนใจหลัก จากความเข้าใจในสิ่งที่เขาพูดดูเหมือนว่าเขาจะบอกว่า SSD นั้นจะลดประโยชน์ของฐานข้อมูล ( อย่างมาก ) เพื่ออธิบายวิธีที่ฉันมาถึงการตีความนี้: เขากล่าวถึงวิธีที่มี HDDs / ดิสก์หมุนการดึงข้อมูลช้า อย่างไรก็ตามทุกวันนี้เราใช้ SSD เขาตั้งข้อสังเกต เขาเริ่มต้นด้วย "RAM กำลังมา" จากนั้นดำเนินการต่อโดยการกล่าวถึงดิสก์ RAM แต่แล้วก็บอกว่าเขาไม่สามารถเรียกมันว่าดิสก์ RAM ได้ดังนั้นจึงต้องบอกว่า RAM ดังนั้นสำหรับ RAM เราไม่ต้องการดัชนีเพราะทุกไบต์ต้องใช้เวลาเท่ากันในการรับ ( ย่อหน้านี้ถอดความจากฉัน ) ดังนั้นเขาแนะนำ RAM (เหมือนในหน่วยความจำคอมพิวเตอร์) แทน DBs (นั่นคือสิ่งที่ฉันตีความคำแถลงของเขาในฐานะ) ไม่สมเหตุสมผลเพราะมันเหมือนกับการบอกว่าระเบียนทั้งหมดเป็นหน่วยความจำในการประมวลผลตลอดอายุการใช้งานของแอปพลิเคชัน …

2
เหตุใด SELECT จึงเป็นขนาดเร็วกว่า SELECT foo
พิจารณาตารางค่าและแฮชเช่น: +------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | val | char(9) | NO | | NULL | | | val_hashed | char(50) | YES | | NULL | …

3
การแบ่งพาร์ติชันตารางช่วยได้อย่างไร
ฉันมีปัญหาในการคว้าความคิดของข้อดีและข้อเสียของการแบ่งตาราง ฉันกำลังจะเริ่มทำงานในโครงการซึ่งจะมี 8 ตารางและหนึ่งในนั้นจะเป็นตารางข้อมูลหลักที่จะเก็บบันทึก 180-260 ล้าน เนื่องจากมันจะถูกทำดัชนีตารางอย่างถูกต้องดังนั้นฉันคิดว่าการ จำกัด ระเบียนของตารางไว้ที่ 20 ล้านด้วยวิธีนี้ฉันจะต้องสร้างตาราง 9-13 แต่ฉันไม่แน่ใจว่ามันจะปรับปรุงประสิทธิภาพได้อย่างไรเพราะพวกเขาจะนั่งอยู่บนเครื่องเดียวกัน (32GB RAM)? ฉันใช้ MySQL และตารางจะเป็น MyISAM และตารางใหญ่จะมีดัชนีในฟิลด์ id และไม่มีความซับซ้อนเพิ่มเติมเช่นการค้นหาข้อความแบบเต็มเป็นต้น โปรดแสดงการแบ่งตารางเทียบกับการแบ่งพาร์ติชันฐานข้อมูลด้วย

3
INSERT ที่มีประสิทธิภาพเข้าสู่ตารางที่มีดัชนีเป็นกลุ่ม
ฉันมีคำสั่ง SQL ที่แทรกแถวลงในตารางที่มีดัชนีคลัสเตอร์ในคอลัมน์ TRACKING_NUMBER เช่น: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE คำถามของฉันคือ - มันช่วยในการใช้คำสั่งย่อย ORDER BY ในคำสั่ง SELECT สำหรับคอลัมน์ดัชนีคลัสเตอร์หรือไม่หรือการได้รับผลประโยชน์ใด ๆ จะได้รับผลกระทบจากการเรียงลำดับพิเศษที่จำเป็นสำหรับคำสั่ง ORDER BY?

4
การอัพเดตแถวด้วยค่าเดียวกันอัพเดตแถวจริงหรือไม่?
ฉันมีคำถามเกี่ยวกับประสิทธิภาพ สมมติว่าฉันมีผู้ใช้ชื่อ Michael ใช้แบบสอบถามต่อไปนี้: UPDATE users SET first_name = 'Michael' WHERE users.id = 123 แบบสอบถามจะดำเนินการอัปเดตจริงหรือไม่แม้ว่าจะมีการอัปเดตเป็นค่าเดียวกันหรือไม่ ถ้าเป็นเช่นนั้นฉันจะป้องกันไม่ให้เกิดขึ้นได้อย่างไร

2
MySQL สร้างตารางชั่วคราวบนดิสก์ ฉันจะหยุดมันได้อย่างไร
เรากำลังเรียกใช้ไซต์ (Moodle) ที่ผู้ใช้พบว่าช้า ฉันคิดว่าฉันได้ติดตามปัญหาของ MySQL ที่สร้างตารางชั่วคราวบนดิสก์ ฉันดูตัวแปรcreated_tmp_disk_tablesในการดูแลเซิร์ฟเวอร์ Mysql Workbench และจำนวนเพิ่มขึ้นด้วยประมาณ 50 tables / s หลังจากใช้ไป 1 วันcreated_tmp_disk_tablesคือ> 100k นอกจากนี้ดูเหมือนว่าหน่วยความจำจะไม่ออก การใช้งานเพิ่มขึ้นเรื่อย ๆ จนกระทั่งระบบใช้งานไม่ได้และเราต้องเริ่ม MySQL ใหม่ ฉันต้องเริ่มต้นใหม่เกือบทุกวันและเริ่มต้นด้วยการใช้หน่วยความจำที่มีอยู่ประมาณ 30-35% และจบวันด้วย 80% ฉันไม่มี blobs ในฐานข้อมูลและไม่สามารถควบคุมการค้นหาได้ดังนั้นฉันจึงไม่สามารถพยายามปรับให้เหมาะสม ฉันได้ใช้Percona Confirguration Wizardเพื่อสร้างไฟล์การกำหนดค่า แต่ my.ini ไม่ได้แก้ปัญหาเช่นกัน คำถาม ฉันควรเปลี่ยนอะไรเพื่อหยุด MySQL ไม่ให้สร้างตารางชั่วคราวบนดิสก์ จำเป็นต้องเปลี่ยนการตั้งค่าหรือไม่? ฉันควรจะโยนความทรงจำมากกว่านี้หรือไม่ ฉันจะหยุด MySQL ไม่ให้กินหน่วยความจำได้อย่างไร แก้ไข ฉันเปิดใช้งานการslow_queriesบันทึกและค้นพบว่าการสืบค้นSELECT GET_LOCK()ถูกบันทึกไว้ช้า การค้นหาอย่างรวดเร็วเปิดเผยว่าฉันอนุญาตการเชื่อมต่อแบบถาวรในการกำหนดค่า …

2
ฉันจะทำการอบ MySQL อย่างถูกต้องได้อย่างไร?
ฉันต้องการทดสอบประสิทธิภาพ (เรียกว่าอบ) เซิร์ฟเวอร์ MySQL รอบต่อนาทีกับส้อมอื่น ๆ เช่นเซิร์ฟเวอร์ Percona, MariaDB และอาจเป็นไปได้ ฉันหวังว่าด้วยการถามคำถามนี้ฉันสามารถเข้าใจวิธีการที่อยู่เบื้องหลังการตั้งค่าการทดสอบประสิทธิภาพที่เหมาะสม ฉันวางแผนที่จะใช้ sysbench เพื่อทำการทดสอบจริง แต่ฉันเปิดทุกอย่าง ขั้นตอนใดที่ฉันควรทำเพื่อให้แน่ใจว่าผลการทดสอบในการเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ลและ RDBMS นั้นเป็นเพียงตัวแปรเท่านั้น ฉันจะเริ่มต้นที่ไหน ฉันจะประเมินผลลัพธ์ได้อย่างไร คุณให้คำแนะนำอะไรแก่ฉัน

1
การเพิ่มประสิทธิภาพดัชนีพร้อมวันที่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีตารางวัตถุขนาดใหญ่ (แถว 15M +) ใน PostgreSQL 9.0.8 ซึ่งฉันต้องการค้นหาเขตข้อมูลที่ล้าสมัย ฉันต้องการแบ่งคำถามเป็นล้าน ๆ เพื่อความยืดหยุ่นในการปรับขนาดและการทำงานพร้อมกันและฉันต้องการดึงข้อมูลทั้งหมดด้วยฟิลด์ updated_at ด้วยวันที่ไม่กี่วันที่ผ่านมา ฉันได้ลองใช้ดัชนีจำนวนมากและข้อความค้นหาหลายล้านรายการและดูเหมือนว่าฉันจะไม่สามารถทำงานได้ภายใน 100 วินาทีด้วยฮาร์ดแวร์ Ronin ของ Heroku ฉันกำลังมองหาคำแนะนำที่ฉันไม่ได้พยายามทำให้มีประสิทธิภาพมากที่สุด ลอง # 1 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id …

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

1
ตรรกะอ่านแตกต่างกันเมื่อเข้าถึงข้อมูล LOB เดียวกัน
นี่คือการทดสอบสามแบบที่อ่านข้อมูลเดียวกัน แต่รายงานการอ่านเชิงตรรกะที่แตกต่างกันมาก: ติดตั้ง สคริปต์ต่อไปนี้สร้างตารางทดสอบที่มี 100 แถวเหมือนกันแต่ละแถวมีคอลัมน์xml ที่มีข้อมูลเพียงพอเพื่อให้แน่ใจว่าจะถูกเก็บไว้นอกแถว ในฐานข้อมูลการทดสอบของฉันความยาวของxml ที่สร้างขึ้นคือ 20,204 ไบต์สำหรับแต่ละแถว -- Conditional drop IF OBJECT_ID(N'dbo.XMLTest', N'U') IS NOT NULL DROP TABLE dbo.XMLTest; GO -- Create test table CREATE TABLE dbo.XMLTest ( ID integer IDENTITY PRIMARY KEY, X xml NULL ); GO -- Add 100 wide xml rows DECLARE @X …

6
วิธีตรวจสอบ EXISTS อย่างมีประสิทธิภาพในหลาย ๆ คอลัมน์?
นี่เป็นปัญหาที่ฉันคิดขึ้นมาเป็นระยะและยังไม่พบทางออกที่ดีสำหรับ เผื่อว่าโครงสร้างตารางต่อไปนี้ CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) และข้อกำหนดคือการพิจารณาว่าคอลัมน์ใดคอลัมน์หนึ่งที่มีค่าว่างBหรือCมีNULLค่าใด ๆ(และถ้าเป็นเช่นนั้น) นอกจากนี้สมมติว่าตารางมีแถวนับล้านแถว (และไม่มีสถิติคอลัมน์ที่สามารถมองได้เนื่องจากฉันสนใจวิธีแก้ปัญหาทั่วไปสำหรับคิวรีประเภทนี้) ฉันสามารถคิดถึงวิธีการไม่กี่ทางที่จะเข้าใกล้สิ่งนี้ แต่ทุกคนก็มีจุดอ่อน EXISTSงบสองแยก นี่จะมีข้อดีของการอนุญาตให้แบบสอบถามหยุดสแกนเร็วที่สุดเท่าที่NULLจะพบ แต่ถ้าในความเป็นจริงไม่มีทั้งคอลัมน์ทั้งNULLสองการสแกนแบบเต็มจะส่งผลให้ แบบสอบถามรวมครั้งเดียว SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) …

2
จะรู้ได้อย่างไรว่าเมื่อไหร่ที่ฉันมีดัชนีมากเกินไป
ใช้ Microsoft SQL Server Profiler ทุกครั้งจากนั้นแนะนำฉันด้วยดัชนีและสถิติใหม่ ๆ ที่จะสร้าง ("... 97% การปรับปรุงโดยประมาณ ... ") จากความเข้าใจของฉันทุกดัชนีเพิ่มสามารถทำให้SELECTแบบสอบถามSQL ได้เร็วขึ้น แต่ยังUPDATEหรือINSERTแบบสอบถามช้าลงเนื่องจากดัชนีจะต้องมีการปรับ สิ่งที่ฉันสงสัยคือเมื่อฉันมีดัชนี / สถิติ "มากเกินไป" อาจจะไม่มีคำตอบที่ชัดเจนเกี่ยวกับเรื่องนี้ แต่บางกฎของหัวแม่มือ

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