ฉันจะตั้งเวลาสอบถาม SQL โดยใช้ psql ได้อย่างไร


238

ฉันต้องการเปรียบเทียบการสืบค้น SQL บางข้อฐานข้อมูลของฉัน PostgreSQL มีวิธีที่ฉันสามารถเวลา SQL แบบสอบถามใช้ใด ๆpsql?


4
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการเปรียบเทียบการสืบค้น PostgreSQL: dba.stackexchange.com/q/42012/9622
Franck Dernoncourt

คำตอบ:


321

เพียงแค่เปิดการจับเวลาโดยการป้อน:

\timing


1
จาก bash out ตัวเลือก "-c" ของpsqlไม่อนุญาตการตั้งค่านี้ คุณสามารถทำได้ด้วยบางสิ่งเช่น: psql --o /dev/null <<EOF \timing select 1 EOF
3 manuek

6
หรือทำpsql -c '\timing' -c 'select 1'
cdmckay

72

สามารถเปิดใช้งานการกำหนดเวลาด้วย\timingที่พร้อมต์ psql (ดังที่คาเลบกล่าวไว้แล้ว)

หากคุณอยู่ที่ 8.4 หรือสูงกว่าคุณสามารถเพิ่มอาร์กิวเมนต์เปิด / ปิดเป็นทางเลือก\timingซึ่งจะมีประโยชน์หากคุณต้องการตั้งเวลาในไฟล์. psqlrc - จากนั้นคุณสามารถตั้งค่า\timing onอย่างชัดเจนในสคริปต์โดยที่ธรรมดา\timingจะสลับกัน มันปิด


12

เวลาที่\timingส่งคืนยังรวมถึงเวลาแฝงเครือข่ายหากคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล

เมื่อคุณไม่ต้องการสิ่งนั้นและไม่ต้องการเอาต์พุตคิวรีให้ใช้งานได้ดีกว่าEXPLAIN ANALYZEซึ่งผลลัพธ์แผนการเคียวรีด้วยตัววางแผนประมาณพร้อมกับเวลาดำเนินการจริง

ตัวอย่างเช่น, EXPLAIN ANALYZE SELECT foo from bar ;


1
... ปัญหาเดียวที่คุณไม่ได้รับผลลัพธ์แบบสอบถามปกติ
dezso

2
การใช้explain analyzeอัตราผลตอบแทนที่ประมาณสองเท่าของสิ่งที่ฉันเห็นเมื่อใช้\timingซึ่งตรงข้ามกับสิ่งที่ฉันคาดหวังจากความคิดเห็นที่นี่เกี่ยวกับเวลาแฝงของเครือข่าย ฉันสงสัยว่ามีค่าใช้จ่ายในการดำเนินการปกติของanalyzeที่เพิ่มไปยังเวลาแบบสอบถาม จากเอกสารที่ฉันคิดว่าEXPLAIN (ANALYZE, TIMING OFF) SELECT foo FROM barจะให้ข้อมูลเวลาที่มีประโยชน์มากขึ้น ดูpostgresql.org/docs/9.6/static/sql-explain.htmlเพื่อดูรายละเอียด
larsks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.