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

MySQL ทุกรุ่น (ไม่ใช่ Microsoft SQL Server) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น mysql-5.7 หากเกี่ยวข้องกับคำถาม

2
มีวิธีใดบ้างในการประเมินค่าใช้จ่ายในการดำเนินการสืบค้นใน MySQL หรือไม่?
ใน PostgreSQL นั้น EXPLAIN หรือ EXPLAIN ANALYZE จะแสดงค่าใช้จ่ายโดยประมาณในการดำเนินการสืบค้น แต่อธิบายใน MySQL ไม่ได้ให้ข้อมูลนี้ ฉันจะได้รับค่าประมาณโดยไม่ต้องติดตั้งเครื่องมืออื่น ๆ ได้อย่างไร ฉันใช้ MySQL-5.6.16

1
การลบข้อมูล mysql จำนวนมาก (4 ล้านแถว) อย่างมีประสิทธิภาพเป็นประจำ
เรามีตาราง mysql ที่เวลาประมาณ 12 ล้านแถว เราจำเป็นต้องลบข้อมูลเก่าเพื่อให้ขนาดของตารางค่อนข้างจัดการได้ ตอนนี้เรากำลังเรียกใช้แบบสอบถามนี้ทุกวันเวลาเที่ยงคืนโดยใช้งาน cron: DELETE FROM table WHERE endTime < '1393632001' ครั้งล่าสุดที่มีการเรียกใช้แบบสอบถามตรวจสอบ 4,602,400 ใช้เวลา 3 นาทีและ CPU ดำเนินการผ่านหลังคา เราสามารถทำอะไรได้บ้างเพื่อป้องกันไม่ให้ CPU, การเชื่อมต่อฐานข้อมูลแบบซิงโครนัส, ความลึกของคิวดิสก์และอื่น ๆ จากการ spiking อย่างไม่มีเหตุผลในขณะที่ยังล้างข้อมูลเก่า PS: คุณจะสังเกตเห็นว่าการค้นหาเกิดขึ้นจริงในเวลาที่ไม่เหมาะสมพอสมควรในรอบการใช้งานของเรา สมมติว่าเราได้เปลี่ยนเวลาของการค้นหาให้เกิดขึ้นที่จุดต่ำสุดของการใช้งานในแต่ละวัน นอกจากนี้ยังไม่มีดัชนีใน "endTime" และฉันต้องการเก็บไว้อย่างนั้นถ้าเป็นไปได้เพราะมีการแทรกข้อมูลจำนวนมากเป็นประจำและไม่ต้องค้นหามากนัก
10 php  mysql 

2
ฉันทำฐานข้อมูล `performance_schema` ของ MySQL แล้วฉันจะสร้างมันได้อย่างไร
ในขณะที่แก้ไขปัญหา ibdata / log ฉันตั้งใจทำperformance_schemaฐานข้อมูลของฉันโดยไม่ได้ตั้งใจฉันต้องการสร้างใหม่ mysql> SHOW VARIABLES LIKE 'perf%'; +---------------------------------------------------+---------+ | Variable_name | Value | +---------------------------------------------------+---------+ | performance_schema | ON | | performance_schema_events_waits_history_long_size | 10000 | | performance_schema_events_waits_history_size | 10 | | performance_schema_max_cond_classes | 80 | | performance_schema_max_cond_instances | 1000 | | performance_schema_max_file_classes | 50 | | performance_schema_max_file_handles | …
10 mysql 

2
mysqladmin ไม่ใช้รหัสผ่านแบบอินไลน์
ฉันกำลังพยายามตั้งค่า cron สำหรับการสำรองข้อมูลจากเครื่องส ดังนั้นฉันต้องหยุดทาส ฉันออกคำสั่ง mysqladmin --user=root --password=test_pass stop-slave แต่มันกำลังโยนข้อผิดพลาด: mysqladmin: เชื่อมต่อกับเซิร์ฟเวอร์ที่ 'localhost' ล้มเหลวผิดพลาด: 'การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้' รูท '@' localhost '(ใช้รหัสผ่าน: YES)' ตอนนี้ฉันลองด้วยคำสั่ง mysqladmin --user=root --password stop-slave มันให้รหัสผ่านและฉันก็ให้test_passและทุกอย่างก็ดี ทำไมจึงเกิดขึ้น ทางเลือกคืออะไร? NB: BTW รุ่น mysql ของฉันคือmysql-5.0.95-5มันทำให้รู้สึกใด ๆ

1
การวางคำสั่ง Select ในธุรกรรม
ข้อแตกต่างระหว่าง 2 ข้อความค้นหาเหล่านี้คืออะไร: START TRANSACTION; SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; COMMIT; และไม่มีการทำธุรกรรม: SELECT * FROM orders WHERE id=1; UPDATE orders SET username='John' WHERE id=1; ผลของการมีSELECTการทำธุรกรรมภายในคืออะไร? หากDELETE FROM orders WHERE id=1ถูกเรียกจากเซสชันอื่นหลังจากSELECTทั้งสองกรณีจะถูกประมวลผลเมื่อใด

3
คอลัมน์ nullable สองคอลัมน์จำเป็นต้องมีค่า
คำถามที่ไม่มีคำอธิบาย: อย่างไรก็ตามมีข้อ จำกัด ของค่า Null 2 ​​ค่าที่ต้องมีค่า 1 เสมอหรือไม่ ตัวอย่างเช่นสองคอลัมน์วันที่ทั้งเป็นโมฆะ แต่มีอย่างน้อย 1 ที่ต้องมีค่า คำอธิบายปัญหา: สมมติว่าฉันมีตารางที่เรียกว่าค่าใช้จ่าย และมี 2 วัน: prevision_expense_expiration_date DATE NULLABLE ค่าใช้จ่าย _payment_date DATE NULLABLE ตรรกะของคอลัมน์ 2 คอลัมน์ดังต่อไปนี้: ฉันซื้อของบางอย่างและฉันรู้ว่าฉันต้องจ่ายเงินสำหรับบางวันเช่นค่าโทรศัพท์ ฉันจะป้อนสิ่งนี้เป็นค่าใช้จ่ายโดยมี costs_payment_date วันนี้เป็นวันที่ควรจะจ่าย แต่ไม่ใช่วันที่จ่ายจริงเช่นวันหมดอายุของใบแจ้งหนี้ ในสถานการณ์อื่น ๆ ฉันขายบัตรของขวัญของผู้ให้บริการบางรายเพื่อให้บริการ ฉันอาจมีค่าใช้จ่ายในการซื้อให้กับผู้ให้บริการของฉันบริการโอนไปยังลูกค้าของฉันเฉพาะในกรณีที่ลูกค้าแลกบัตร ดังนั้นบัตรของขวัญจึงมีวันหมดอายุฉันต้องการทำเช่นนั้นสำหรับ 'ค่าใช้จ่าย' โดยไม่ต้องใส่เป็นค่าใช้จ่ายสำหรับเวลาที่บัตรของขวัญนั้นถูกต้องหากบัตรของขวัญหมดอายุ 'ค่าใช้จ่าย' นั้นไม่ควรเข้าบัญชี ระบบ. ฉันรู้ว่าฉันสามารถมี 2 ตารางเท่า ๆ กันที่เรียกว่า prevision_expense และ …

4
วิธีจัดการกับฐานข้อมูลที่ไม่มีเอกสารขนาดใหญ่
ฉันเพิ่งได้รับการว่าจ้างให้เป็น IT Guy คนเดียวใน บริษัท X หนึ่งและฉันได้รับมอบหมายให้แก้ไขแอปพลิเคชันของพวกเขาและในความคิดของฉันวิธีที่ดีที่สุดในการเริ่มต้นคือการทำความเข้าใจฐานข้อมูล ฐานข้อมูลปัจจุบันของพวกเขาคือฐานข้อมูล MySQL ที่มี 186 ตาราง (โปรดทราบว่าบางตารางว่างเปล่าสำหรับพระเจ้ารู้ว่าทำไม) และแอปพลิเคชั่นสื่อสารกับฐานข้อมูลผ่านส่วนต่อประสานฐานข้อมูล MS Access (ฉันถามตัวเองว่าทำไมนักพัฒนาถึงทำเช่นนั้นด้วย) คำถามคือฉันจะเริ่มต้นจัดการฐานข้อมูลที่ไม่มีเอกสารขนาดใหญ่นี้ได้อย่างไร ใช่มันไม่มีเอกสารเนื่องจากผู้พัฒนาแอปพลิเคชันไม่เต็มใจที่จะให้ ERD หรือพจนานุกรมข้อมูลหรือข้อมูลใด ๆ เกี่ยวกับฐานข้อมูลเพื่อทำให้ชีวิตของฉันง่ายขึ้น คุณจะแนะนำให้ใช้ความพยายามที่เต็มไปด้วยอันตรายนี้ในการทำความเข้าใจซอกทุกซอกทุกมุมของฐานข้อมูลที่ค่อนข้างใหญ่ได้อย่างไร คำถามที่เกี่ยวข้อง: วิธีการดำน้ำในฐานข้อมูลที่น่าเกลียด?

4
วิธีเพิ่มการสำรองข้อมูลที่รวดเร็วและกู้คืนฐานข้อมูล 500GB โดยใช้ mysqldump
มีฐานข้อมูลขนาด 500GB ตารางในฐานข้อมูล A มีทั้งตาราง MyISAM และ INNODB ตาราง MyISAM เป็นตารางต้นแบบและตาราง Innodb เป็นตารางธุรกรรมหลัก สำรองและคืนค่าโดยใช้การถ่ายโอนข้อมูล mysql ออกจากเวลานานหรือวัน max_allowed_packet = 1G foreign_key_checks = 0 auto_commit = ปิด

2
การลบตาราง MySQL ด้วยธุรกรรมที่ค้างอยู่
มีวิธีการลบตาราง InnoDB หรือฐานข้อมูลที่มีธุรกรรมที่ค้างอยู่ใน MySQL (ควรอยู่ในระดับระบบไฟล์) หรือไม่? เกิดอะไรขึ้น: ฉันใช้ MySQL 5.5.28 และวิ่งLOAD DATA INFILE…เพื่อนำเข้าชุดข้อมูลขนาดใหญ่ (300M แถว) ลงในตาราง InnoDB ฉันไม่ได้ใช้set autocommit = 0;มาก่อน น่าเสียดายที่mysqldมีการหยุดกลางการนำเข้า เมื่อฉันรีสตาร์ทmysqlจะพยายามย้อนกลับธุรกรรมที่กรอกบันทึกของระบบด้วยข้อความเช่นนี้: mysqld_safe [4433]: 121212 16:58:52 InnoDB: กำลังรอ 1 ธุรกรรมที่กำลังจะเสร็จสิ้น ปัญหาคือการย้อนกลับทำงานมากกว่า 25 ชั่วโมงในขณะนี้ซึ่ง mysqldไม่ยอมรับการเชื่อมต่อซ็อกเก็ตใด ๆ ฉันไม่สามารถลบ/var/lib/mysql/*และเริ่มจากศูนย์ได้เนื่องจากมีบางฐานข้อมูล InnoDB / ตารางอื่น ๆ ในเครื่องนี้เช่นกัน อย่างไรก็ตามตารางที่มีปัญหานั้นเป็นตารางเดียวในฐานข้อมูลแยกต่างหาก การลบทั้งตารางหรือฐานข้อมูลทั้งหมดไม่ใช่ปัญหาเนื่องจากฉันสามารถนำเข้าข้อมูลทั้งหมดอีกครั้งในภายหลัง

1
คำนวณ MATCH () เทียบกับ () คะแนนจาก QUERY QUERY ที่ไม่ใช่สำหรับแต่ละตาราง
ฉันพยายามที่จะมีคะแนนสำหรับส่วนทั้งหมดของคำสั่ง SELECT SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword') UNION SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword') UNION SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword') ในกรณีดังกล่าวคะแนนต่อตาราง + พวกเขาจะไม่เรียงตามความเกี่ยวข้อง แต่ฉันลองวิธีนี้ซึ่งใช้งานได้ แต่ไม่คุ้มค่ากับการผลิต SELECT * FROM ( SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` …

1
การสร้างตาราง MySQL ช้าอย่างบ้าคลั่ง
การสร้างตารางอย่างง่าย ๆ บนหนึ่งในฐานข้อมูล MySQL ของฉันใช้เวลาตลอดไป: mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) เครื่องค่อนข้างไม่ได้ใช้งาน: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 แนวคิดใดที่จะตรวจสอบเรื่องนี้? แก้ไข : ทำตามคำแนะนำของ DTestนี่คือโปรไฟล์การดำเนินการ: mysql> SHOW PROFILE …

2
ฉันจะกำหนดค่า MySQL Innodb ให้จัดการกับเม็ดมีด 1000 ต่อชั่วโมงได้อย่างไร
ฉันมีเว็บไซต์ที่มีปริมาณการใช้งานสูงซึ่งเป็นไปได้ที่จะมีการแทรกระเบียนใหม่ 1,000 รายการทุกชั่วโมง ข้อผิดพลาดเดียวนี้ทำให้หมดอำนาจเว็บไซต์: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 …

7
การจัดทำดัชนี MySQL VarChar
ฉันกำลังพยายามจัดทำดัชนีblogentriesฐานข้อมูลของฉันเพื่อประสิทธิภาพที่ดีขึ้น แต่พบปัญหา นี่คือโครงสร้าง: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; แบบสอบถามแบบนี้ใช้ดัชนีอย่างถูกต้อง: EXPLAIN SELECT id_id,title_id FROM blogentries …
10 mysql  varchar 

1
การแบ่งพาร์ติชัน MySQL: มีการแลกเปลี่ยนประสิทธิภาพระหว่างจำนวนพาร์ติชันและขนาดของแต่ละพาร์ติชันหรือไม่?
ฉันมีตารางขนาดใหญ่ (หลายร้อยล้านแถว) ที่ฉันต้องการแบ่งพาร์ติชันอย่างมีประสิทธิภาพ คำถามของฉันคือว่ามีการแลกเปลี่ยนระหว่างขนาดพาร์ติชันและจำนวนพาร์ติชัน เท่าที่ฉันเข้าใจแบบสอบถามส่วนใหญ่ในคอลัมน์ที่ใช้ในพาร์ติชันจะเร็วขึ้นเนื่องจากแบบสอบถามจะ (สำหรับการค้นหาส่วนใหญ่) เท่านั้นที่จะต้องค้นหาภายในพาร์ติชันที่ใช้กับแบบสอบถาม ดังนั้นมันจะทำให้รู้สึกว่าในการเพิ่มประสิทธิภาพสูงสุดคุณควรแบ่งตารางใหญ่เป็นจำนวนพาร์ติชันสูงสุดทำให้แต่ละพาร์ติชันมีขนาดเล็กที่สุด ในกรณีของ MySQL หมายถึง 1024 พาร์ติชัน แต่มีข้อเสียเปรียบด้านประสิทธิภาพใด ๆ ที่มีพาร์ติชั่นจำนวนมาก? เป็นเช่นนั้นเราจะหาจำนวนพาร์ติชั่นที่เหมาะสมได้อย่างไร? หมายเหตุ: มีคำถามที่ค่อนข้างคล้ายกันเกี่ยวกับ stackoverflow อยู่แล้วแต่มีเพียงหนึ่งคำตอบซึ่ง (จากมุมมองของฉัน) คิดถึงเครื่องหมาย ดังนั้นฉันจะระบุคำถามในแบบของฉันเอง ... หวังว่ามันจะชัดเจนยิ่งขึ้น

4
วิธีการใช้ประโยชน์สูงสุดจาก MySQL บนเครื่อง QuadCore ด้วย RAM ขนาด 16 GB?
ฉันใช้เซิร์ฟเวอร์ MySQL 5.5 บนเวิร์กสเตชันของฉันสำหรับการวิเคราะห์ข้อมูลทางวิทยาศาสตร์และสงสัยว่าจะกำหนดค่า MySQL อย่างไรเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด ประเภทของแบบสอบถามที่ฉันใช้โดยทั่วไปเกี่ยวข้องกับการรวม 10-20 ตารางและสามารถทำงานได้ค่อนข้างนานหนึ่งถึงหลายนาทีโดยไม่มีข้อยกเว้นเลย มีผู้ใช้เพียงไม่กี่รายเท่านั้นที่เข้าถึงฐานข้อมูลในเวลาเดียวกัน (5 เป็นจำนวนสูงสุด) ฉันย้ายเซิร์ฟเวอร์จาก Lenovo Thinkpad T61 ด้วย Dual Core 2.2 GHz และ RAM 4 GB ไปยังเครื่องใหม่ที่มีส่วนประกอบที่เลือกด้วยมือ: Intel i7 3770, 4x 3.4 GHz (ทำงานที่ 4x3.7 GHz) ชิปเซ็ต Z77 DDR3 1600 RAM 16 GB Windows 7 Prof 64-bit เซิร์ฟเวอร์ Windows และ MySQL …

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