นี่คือคำสั่ง pt-table-usagep ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
pt-table-usage - วิเคราะห์ว่าคิวรี่ใช้ตารางอย่างไร
เรื่องย่อ
การใช้งาน: pt-table-usage [ตัวเลือก] [ไฟล์]
pt-table-usage อ่านข้อความค้นหาจากบันทึกและวิเคราะห์ว่าพวกเขาใช้ตารางอย่างไร หากไม่มี FILE คือ
ระบุว่าจะอ่าน STDIN จะพิมพ์รายงานสำหรับแต่ละแบบสอบถาม
ความเสี่ยง
Percona Toolkit ได้รับการพัฒนา พิสูจน์แล้วในโลกแห่งความเป็นจริง และผ่านการทดสอบอย่างดี แต่ฐานข้อมูลทั้งหมด
เครื่องมือสามารถก่อให้เกิดความเสี่ยงต่อระบบและเซิร์ฟเวอร์ฐานข้อมูล ก่อนใช้เครื่องมือนี้
กรุณา:
· อ่านเอกสารประกอบของเครื่องมือ
·ตรวจสอบเครื่องมือที่เรียกว่า "BUGS"
· ทดสอบเครื่องมือบนเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริง
·สำรองเซิร์ฟเวอร์ที่ใช้งานจริงของคุณและตรวจสอบการสำรองข้อมูล
DESCRIPTION
pt-table-usage อ่านข้อความค้นหาจากบันทึกและวิเคราะห์ว่าพวกเขาใช้ตารางอย่างไร บันทึกควร
อยู่ในรูปแบบบันทึกการสืบค้นที่ช้าของ MySQL
การใช้ตารางเป็นมากกว่าการบ่งชี้ว่าตารางใดที่คิวรีอ่านหรือเขียน
นอกจากนี้ยังระบุการไหลของข้อมูล: ข้อมูลเข้าและออก เครื่องมือกำหนดการไหลของข้อมูลโดย
บริบทที่ตารางปรากฏขึ้น แบบสอบถามเดียวสามารถใช้ตารางได้หลายแบบ
บริบทพร้อมกัน ผลลัพธ์ของเครื่องมือแสดงรายการทุกบริบทสำหรับทุกตาราง นี้
รายการ CONTEXT-TABLE ระบุว่าข้อมูลไหลระหว่างตารางอย่างไร ส่วน "ผลลัพธ์" แสดงรายการ
บริบทที่เป็นไปได้และอธิบายวิธีการอ่านรายงานการใช้ตาราง
เครื่องมือจะวิเคราะห์การไหลของข้อมูลลงไปที่ระดับของแต่ละคอลัมน์ ดังนั้นจึงเป็นประโยชน์หาก
คอลัมน์จะถูกระบุอย่างชัดเจนในแบบสอบถาม หากแบบสอบถามใช้เพียงตารางเดียว ดังนั้น
ทุกคอลัมน์ต้องมาจากตารางนั้น และไม่มีปัญหา แต่ถ้าแบบสอบถามใช้
หลายตารางและชื่อคอลัมน์ไม่เข้าเกณฑ์ จึงจำเป็นต้องใช้
"EXPLAIN EXTENDED" ตามด้วย "SHOW WARNINGS" เพื่อกำหนดตารางที่คอลัมน์
เป็นของ
หากเครื่องมือไม่ทราบฐานข้อมูลเริ่มต้นของแบบสอบถาม ซึ่งสามารถเกิดขึ้นได้เมื่อฐานข้อมูล
ไม่พิมพ์ในบันทึก ดังนั้น "EXPLAIN EXTENDED" อาจล้มเหลวได้ ในกรณีนี้ คุณสามารถระบุ
ฐานข้อมูลเริ่มต้นด้วย "--database" คุณยังสามารถใช้ "--create-table-definitions"
ตัวเลือกที่จะช่วยแก้ไขความคลุมเครือ
เอาท์พุท
เครื่องมือจะพิมพ์รายงานการใช้งานสำหรับแต่ละตารางในทุกการสืบค้น ซึ่งคล้ายกับข้อมูลต่อไปนี้:
Query_id: 0x1CD27577D202A339.1
อัพเดท t1
เลือก DUAL
เข้าร่วม t1
เข้าร่วม t2
ที่ไหน t1
Query_id: 0x1CD27577D202A339.2
อัพเดท t2
เลือก DUAL
เข้าร่วม t1
เข้าร่วม t2
ที่ไหน t1
บรรทัดแรกมีรหัสการสืบค้น ซึ่งโดยค่าเริ่มต้นจะเหมือนกับที่แสดงใน pt-
รายงานสรุปข้อความค้นหา เป็นเช็คซัม MD5 ของ "ลายนิ้วมือ" ของข้อความค้นหา ซึ่งก็คืออะไร
ยังคงอยู่หลังจากลบตัวอักษร ยุบพื้นที่สีขาว และอื่น ๆ ที่หลากหลาย
การเปลี่ยนแปลง รหัสการสืบค้นมีสองส่วนโดยคั่นด้วยจุด: รหัสการสืบค้นและ
หมายเลขโต๊ะ หากคุณต้องการใช้ค่าอื่นเพื่อระบุข้อความค้นหา คุณสามารถระบุ
ตัวเลือก "--id-attribute"
ตัวอย่างก่อนหน้านี้แสดงสองย่อหน้าสำหรับแบบสอบถามเดียว ไม่ใช่สองแบบสอบถาม สังเกตว่า
รหัสแบบสอบถามจะเหมือนกันสำหรับทั้งสอง แต่หมายเลขตารางต่างกัน หมายเลขโต๊ะ
เพิ่มขึ้นทีละ 1 สำหรับแต่ละตารางที่คิวรีอัปเดต เฉพาะแบบสอบถาม UPDATE หลายตารางเท่านั้น
สามารถอัปเดตตารางได้หลายตารางด้วยแบบสอบถามเดียว ดังนั้นหมายเลขตารางจึงเป็น 1 สำหรับรายการอื่นๆ ทั้งหมด
ประเภทของแบบสอบถาม (เครื่องมือไม่สนับสนุนการสืบค้น DELETE แบบหลายตาราง) ตัวอย่าง
ผลลัพธ์ด้านบนมาจากแบบสอบถามนี้:
อัปเดต t1 เป็น เข้าร่วม t2 เป็น b ใช้ (id)
SET a.foo="bar", b.foo="bat"
โดยที่ a.id=1;
ส่วนคำสั่ง "SET" ระบุว่าแบบสอบถามอัปเดตสองตาราง: "a" นามแฝงเป็น "t1" และ "b"
นามแฝงว่า "t2"
หลังจากบรรทัดแรก เครื่องมือจะพิมพ์หมายเลขตัวแปรของบรรทัด CONTEXT-TABLE เป็นไปได้
บริบทมีดังนี้:
· เลือก
SELECT หมายความว่าแบบสอบถามดึงข้อมูลจากตารางด้วยเหตุผลสองประการ NS
ขั้นแรกจะต้องส่งคืนให้กับผู้ใช้โดยเป็นส่วนหนึ่งของชุดผลลัพธ์ เฉพาะข้อความค้นหา SELECT
ส่งคืนชุดผลลัพธ์ ดังนั้นรายงานจะแสดงบริบท SELECT สำหรับการสืบค้น SELECT เสมอ
กรณีที่สองคือเมื่อข้อมูลไหลไปยังตารางอื่นโดยเป็นส่วนหนึ่งของ INSERT หรือ UPDATE
ตัวอย่างเช่น แบบสอบถาม UPDATE ในตัวอย่างข้างต้นมีการใช้งาน:
เลือก DUAL
นี่หมายถึง:
SET a.foo="bar", b.foo="bat"
เครื่องมือนี้ใช้ DUAL สำหรับค่าใดๆ ที่ไม่ได้มาจากตาราง ในกรณีนี้คือ
ค่าตัวอักษร "bar" และ "bat" หากอนุประโยค "SET" นั้นเป็น "SET a.foo=b.foo" แทน
การใช้งานที่สมบูรณ์จะเป็น:
Query_id: 0x1CD27577D202A339.1
อัพเดท t1
เลือก t2
เข้าร่วม t1
เข้าร่วม t2
ที่ไหน t1
การมีอยู่ของบริบท SELECT หลังบริบทอื่น เช่น UPDATE หรือ INSERT
ระบุตำแหน่งที่ UPDATE หรือ INSERT ดึงข้อมูล ตัวอย่างทันที
ด้านบนแสดงถึงการสืบค้น UPDATE ที่อัปเดตแถวในตาราง "t1" ด้วยข้อมูลจาก table
"ที2"
· กริยาอื่นใด
กริยาอื่นๆ เช่น INSERT, UPDATE, DELETE เป็นต้น อาจเป็นบริบท กริยาเหล่านี้
ระบุว่าแบบสอบถามแก้ไขข้อมูลในทางใดทางหนึ่ง หากบริบท SELECT ตามหลังหนึ่งใน
กริยาเหล่านี้ จากนั้นแบบสอบถามจะอ่านข้อมูลจากตาราง SELECT และเขียนลงในสิ่งนี้
ตาราง. สิ่งนี้เกิดขึ้น เช่น กับคำสั่ง INSERT..SELECT หรือ UPDATE ที่ใช้
ค่าจากตารางแทนค่าคงที่
ไม่รองรับประเภทการสืบค้นเหล่านี้: SET, LOAD และ DELETE แบบหลายตาราง
· เข้าร่วม
บริบท JOIN แสดงรายการตารางที่เข้าร่วม ไม่ว่าจะมี JOIN ที่ชัดเจนใน
อนุประโยค FROM หรือโดยปริยายในอนุประโยค WHERE เช่น "t1.id = t2.id"
· ที่ไหน
บริบท WHERE แสดงรายการตารางที่ใช้ในส่วนคำสั่ง WHERE เพื่อกรองผลลัพธ์
ไม่รวมตารางที่เชื่อมต่อโดยปริยายในส่วนคำสั่ง WHERE; นั่นคือ
แสดงรายการเป็นบริบท JOIN ตัวอย่างเช่น:
โดยที่ t1.id > 100 และ t1.id < 200 และ t2.foo ไม่เป็นค่าว่าง
ผลการค้นหาใน:
ที่ไหน t1
ที่ไหน t2
เครื่องมือแสดงรายการเฉพาะตารางที่แตกต่างกัน นั่นคือสาเหตุที่ตาราง "t1" แสดงเพียงครั้งเดียว
· ทลิส
บริบท TLIST แสดงรายการตารางที่แบบสอบถามเข้าถึง แต่ไม่ปรากฏในใดๆ
บริบทอื่นๆ ตารางเหล่านี้มักจะเป็นการเข้าร่วมคาร์ทีเซียนโดยปริยาย ตัวอย่างเช่น
แบบสอบถาม "SELECT * FROM t1, t2" ส่งผลให้:
Query_id: 0xBDDEB6EDA41897A8.1
เลือก t1
เลือก t2
รายการ t1
รายการ t2
อย่างแรกเลย มีสองบริบท SELECT เนื่องจาก "SELECT *" เลือกแถวจากทั้งหมด
ตาราง; "t1" และ "t2" ในกรณีนี้ ประการที่สอง ตารางถูกเชื่อมต่อโดยปริยาย แต่
โดยไม่มีเงื่อนไขการเข้าร่วมใด ๆ ซึ่งส่งผลให้มีการเข้าร่วมคาร์ทีเซียนตามที่ระบุโดย
บริบท TLIST สำหรับแต่ละรายการ
EXIT สถานภาพ
pt-table-usage ออกจาก 1 เมื่อเกิดข้อผิดพลาดใด ๆ หรือ 0 หากไม่มีข้อผิดพลาด
OPTIONS
เครื่องมือนี้ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเพิ่มเติม อ้างถึง "บทสรุป" และการใช้งาน
ข้อมูลสำหรับรายละเอียด
--ขอผ่าน
ถามรหัสผ่านเมื่อเชื่อมต่อกับ MySQL
--ชุดอักขระ
แบบสั้น: -A; ประเภท: string
ชุดอักขระเริ่มต้น หากค่าเป็น utf8 ให้ตั้งค่า binmode ของ Perl บน STDOUT เป็น utf8
ส่งผ่านตัวเลือก mysql_enable_utf8 ไปยัง DBD::mysql และรัน SET NAMES UTF8 หลังจากนั้น
เชื่อมต่อกับ MySQL ค่าอื่น ๆ ตั้งค่า binmode บน STDOUT โดยไม่มีเลเยอร์ utf8
และรัน SET NAMES หลังจากเชื่อมต่อกับ MySQL
--การกำหนดค่า
ชนิด: Array
อ่านรายการไฟล์ปรับแต่งที่คั่นด้วยเครื่องหมายจุลภาค ถ้าระบุ ต้องนี่ก่อน
ตัวเลือกบนบรรทัดคำสั่ง
--constant ข้อมูลค่า
ชนิด: สตริง; ค่าเริ่มต้น: DUAL
ตารางที่จะพิมพ์เป็นแหล่งข้อมูลคงที่ (ตัวอักษร) นี่คือข้อมูลใด ๆ ไม่ใช่
ดึงมาจากตาราง (หรือแบบสอบถามย่อย เนื่องจากไม่สนับสนุนแบบสอบถามย่อย) นี้
รวมค่าตัวอักษรเช่นสตริง ("foo") และตัวเลข (42) หรือฟังก์ชันเช่น
"ตอนนี้()". ตัวอย่างเช่น ในแบบสอบถาม "INSERT INTO t (c) VALUES ('a')" สตริง 'a'
เป็นข้อมูลคงที่ ดังนั้นรายงานการใช้ตารางจึงเป็น:
แทรก t
เลือก DUAL
บรรทัดแรกบ่งชี้ว่าแบบสอบถามแทรกข้อมูลลงในตาราง "t" และวินาที
บรรทัดระบุว่าข้อมูลที่แทรกมาจากค่าคงที่บางค่า
--[ไม่]เกิดข้อผิดพลาดต่อไป
ค่าเริ่มต้น: ใช่
ทำงานต่อไปแม้ว่าจะมีข้อผิดพลาด
--สร้างคำจำกัดความของตาราง
ประเภท: array
อ่านคำจำกัดความ "สร้างตาราง" จากรายการไฟล์ที่คั่นด้วยเครื่องหมายจุลภาค ถ้าคุณ
ไม่สามารถใช้ "--explain-extended" เพื่อรับรองชื่อตารางและคอลัมน์ได้อย่างสมบูรณ์ คุณสามารถบันทึกได้
เอาต์พุตของ "mysqldump --no-data" ไปยังไฟล์อย่างน้อยหนึ่งไฟล์และระบุไฟล์เหล่านั้นด้วย
ตัวเลือกนี้ เครื่องมือจะแยกคำจำกัดความ "CREATE TABLE" ทั้งหมดจากไฟล์และ
ใช้ข้อมูลนี้เพื่อรับรองชื่อตารางและคอลัมน์ หากชื่อคอลัมน์ปรากฏใน
หลายตารางหรือชื่อตารางปรากฏในหลายฐานข้อมูล ความคลุมเครือไม่สามารถ
จะได้รับการแก้ไข
--ปีศาจ
ส้อมไปที่พื้นหลังและแยกออกจากเปลือก ระบบปฏิบัติการ POSIX เท่านั้น
--ฐานข้อมูล
แบบสั้น: -D; ประเภท: string
ฐานข้อมูลเริ่มต้น
--defaults-ไฟล์
แบบสั้น: -F; ประเภท: string
อ่านเฉพาะตัวเลือก mysql จากไฟล์ที่กำหนด คุณต้องระบุชื่อพาธที่แน่นอน
--อธิบาย-ขยาย
ชนิด: DSN
เซิร์ฟเวอร์เพื่อดำเนินการค้นหา EXPLAIN EXTENDED อาจจำเป็นต้องแก้ไข
ชื่อคอลัมน์และตารางที่คลุมเครือ (ไม่เหมาะสม)
--กรอง
ประเภท: string
ยกเลิกเหตุการณ์ที่โค้ด Perl นี้ไม่คืนค่าเป็นจริง
ตัวเลือกนี้เป็นสตริงของรหัส Perl หรือไฟล์ที่มีรหัส Perl ที่คอมไพล์แล้ว
ลงในรูทีนย่อยที่มีอาร์กิวเมนต์เดียว: $event หากค่าที่กำหนดเป็นไฟล์ที่อ่านได้
จากนั้น pt-table-usage จะอ่านไฟล์ทั้งหมดและใช้เนื้อหาเป็นโค้ด
ตัวกรองถูกนำไปใช้ในลักษณะเดียวกับในเครื่องมือ pt-query-digest ดังนั้นได้โปรด
อ้างถึงเอกสารประกอบสำหรับข้อมูลเพิ่มเติม
--ช่วยด้วย
แสดงความช่วยเหลือและออก
--เจ้าภาพ
แบบสั้น: -h; ประเภท: string
เชื่อมต่อกับโฮสต์
--id-แอตทริบิวต์
ประเภท: string
ระบุแต่ละเหตุการณ์โดยใช้แอตทริบิวต์นี้ ค่าเริ่มต้นคือการใช้รหัสการสืบค้น ซึ่งก็คือ
ผลรวมการตรวจสอบ MD5 ของลายนิ้วมือของแบบสอบถาม
--บันทึก
ประเภท: string
พิมพ์เอาต์พุตทั้งหมดไปยังไฟล์นี้เมื่อ daemonized
--รหัสผ่าน
แบบสั้น: -p; ประเภท: string
รหัสผ่านเพื่อใช้ในการเชื่อมต่อ หากรหัสผ่านมีเครื่องหมายจุลภาค จะต้องหลีกเลี่ยง
ด้วยแบ็กสแลช: "exam\,ple"
--ปิด
ประเภท: string
สร้างไฟล์ PID ที่กำหนด เครื่องมือจะไม่เริ่มทำงานหากมีไฟล์ PID อยู่แล้วและ
PID ที่มีอยู่ในนั้นแตกต่างจาก PID ปัจจุบัน อย่างไรก็ตาม หากไฟล์ PID
มีอยู่และ PID ที่มีอยู่ไม่ทำงานอีกต่อไป เครื่องมือจะเขียนทับ PID
ไฟล์ที่มี PID ปัจจุบัน ไฟล์ PID จะถูกลบออกโดยอัตโนมัติเมื่อเครื่องมือออก
--ท่า
แบบสั้น: -P; ประเภท: int
หมายเลขพอร์ตที่ใช้เชื่อมต่อ
--ความคืบหน้า
ชนิด: อาร์เรย์; ค่าเริ่มต้น: เวลา,30
พิมพ์รายงานความคืบหน้าไปยัง STDERR ค่านี้เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคที่มีสองส่วน
ส่วนแรกอาจเป็นเปอร์เซ็นต์ เวลา หรือการวนซ้ำ ส่วนที่สองระบุว่าอย่างไร
บ่อยครั้งควรพิมพ์การอัปเดตเป็นเปอร์เซ็นต์ วินาที หรือจำนวนการทำซ้ำ
--สอบถาม
ประเภท: string
วิเคราะห์แบบสอบถามที่ระบุแทนที่จะอ่านล็อกไฟล์
--read-หมดเวลา
ประเภท: เวลา; ค่าเริ่มต้น: 0
รอเหตุการณ์จากอินพุตเป็นเวลานาน 0 เพื่อรอตลอดไป
ตัวเลือกนี้กำหนดเวลาสูงสุดในการรอเหตุการณ์จากอินพุต ถ้าเหตุการณ์คือ
ไม่ได้รับหลังจากเวลาที่กำหนด เครื่องมือหยุดอ่านอินพุตและพิมพ์
รายงาน
ตัวเลือกนี้ต้องใช้โมดูล Perl POSIX
--รันไทม์
ประเภท: เวลา
นานแค่ไหนที่จะวิ่งก่อนที่จะออก ค่าเริ่มต้นคือเรียกใช้ตลอดไป (คุณสามารถขัดจังหวะด้วย
CTRL-C)
--set-vars
ชนิด: Array
ตั้งค่าตัวแปร MySQL ในรายการคู่ "variable=value" ที่คั่นด้วยเครื่องหมายจุลภาค
โดยค่าเริ่มต้น เครื่องมือจะตั้งค่า:
wait_timeout=10000
ตัวแปรที่ระบุในบรรทัดคำสั่งจะแทนที่ค่าเริ่มต้นเหล่านี้ ตัวอย่างเช่น,
การระบุ "--set-vars wait_timeout=500" จะแทนที่ค่าเริ่มต้นที่ 10000
เครื่องมือจะพิมพ์คำเตือนและดำเนินการต่อหากไม่สามารถตั้งค่าตัวแปรได้
--เบ้า
แบบฟอร์ม; ประเภท: string
ไฟล์ซ็อกเก็ตที่ใช้สำหรับการเชื่อมต่อ
--ผู้ใช้
แบบสั้น: -u; ประเภท: string
ผู้ใช้สำหรับเข้าสู่ระบบหากไม่ใช่ผู้ใช้ปัจจุบัน
--รุ่น
แสดงเวอร์ชันและออก
DSN OPTIONS
ตัวเลือก DSN เหล่านี้ใช้เพื่อสร้าง DSN แต่ละตัวเลือกจะได้รับเช่น "option=value"
ตัวเลือกจะคำนึงถึงขนาดตัวพิมพ์ ดังนั้น P และ p ไม่ใช่ตัวเลือกเดียวกัน ไม่สามารถ
ช่องว่างก่อนหรือหลัง "=" และถ้าค่ามีช่องว่างจะต้องยกมา
ตัวเลือก DSN คั่นด้วยเครื่องหมายจุลภาค ดูหน้าคู่มือ percona-toolkit สำหรับรายละเอียดทั้งหมด
·ก
dsn: ชุดอักขระ; สำเนา: ใช่
ชุดอักขระเริ่มต้น
· NS
สำเนา: ไม่
ฐานข้อมูลเริ่มต้น
· NS
dsn: mysql_read_default_file; สำเนา: ไม่
อ่านเฉพาะตัวเลือกเริ่มต้นจากไฟล์ที่กำหนด
·ชม
dsn: โฮสต์; สำเนา: ใช่
เชื่อมต่อกับโฮสต์
· NS
dsn: รหัสผ่าน; สำเนา: ใช่
รหัสผ่านเพื่อใช้ในการเชื่อมต่อ หากรหัสผ่านมีเครื่องหมายจุลภาค จะต้องหลีกเลี่ยง
ด้วยแบ็กสแลช: "exam\,ple"
· ป
dsn: พอร์ต; สำเนา: ใช่
หมายเลขพอร์ตที่ใช้เชื่อมต่อ
· NS
dsn: mysql_socket; สำเนา: ไม่
ไฟล์ซ็อกเก็ตที่ใช้สำหรับการเชื่อมต่อ
· ยู
dsn: ผู้ใช้; สำเนา: ใช่
ผู้ใช้สำหรับเข้าสู่ระบบหากไม่ใช่ผู้ใช้ปัจจุบัน
และพวกเรา
ตัวแปรสภาพแวดล้อม "PTDEBUG" เปิดใช้งานเอาต์พุตการดีบักแบบละเอียดไปยัง STDERR การเปิดใช้งาน
การดีบักและดักจับเอาต์พุตทั้งหมดไปยังไฟล์ เรียกใช้เครื่องมือเช่น:
PDEBUG=1 pt-table-usage ... > FILE 2>&1
ระวัง: การดีบักเอาท์พุตมีจำนวนมากและสามารถสร้างเอาต์พุตได้หลายเมกะไบต์
ระบบ สิ่งที่ต้องมี
คุณต้องมี Perl, DBI, DBD::mysql และแพ็คเกจหลักบางตัวที่ควรติดตั้งในทุก
Perl เวอร์ชันใหม่พอสมควร
ใช้ pt-table-usagep ออนไลน์โดยใช้บริการ onworks.net