ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

3
วิธีที่ดีที่สุดในการใช้คิวตามตารางพร้อมกัน
ฉันมีตารางใน MySQL ที่แสดงถึงคิวของลิงก์ที่ต้องดำเนินการ ลิงก์จะถูกประมวลผลโดยแอพภายนอกหนึ่งต่อหนึ่งและถูกลบในท้ายที่สุด นี่เป็นคิวที่มีปริมาณสูงและฉันมีแอพประมวลผลหลายอินสแตนซ์กระจายอยู่ทั่วเซิร์ฟเวอร์หลายเครื่อง ฉันจะมั่นใจได้อย่างไรว่าแต่ละระเบียนจะถูกเลือกโดยแอปเดียวเท่านั้น มีวิธีการตั้งค่าสถานะ / ล็อกระเบียนหรือไม่ ตอนนี้เพื่อหลีกเลี่ยงการรับลิงค์เดียวกันสองครั้งขึ้นไปฉันอนุญาตให้แต่ละอินสแตนซ์รับเฉพาะชุดระเบียน (ตาม MOD ของ ID) แต่นี่ไม่ใช่วิธีที่โปร่งใสในการเพิ่มการประมวลผลคิว เพิ่มความเร็วเพียงแค่เพิ่มอินสแตนซ์ใหม่
11 mysql  queue 


1
ข้อผิดพลาดขนาดแถวกับ MySQL
ฉันใช้เซิร์ฟเวอร์ MySQL บน Macbook (สำหรับการทดสอบ) รุ่นคือ 5.6.20 จาก Homebrew ฉันเริ่มพบข้อผิดพลาด "ขนาดแถวใหญ่เกินไป" และฉันสามารถลดขนาดลงได้ในกรณีทดสอบนี้ โต๊ะ: mysql> describe test; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | stuff | longtext | YES …
11 mysql  innodb 

5
ไม่สามารถสร้างตาราง แต่ไม่มีตาราง
ฉันใช้ขั้นตอนเหล่านี้เพื่อสร้างตารางmy_userที่มีอยู่แล้ว แต่หายไปจากฐานข้อมูลของฉันmy_db: mysql> USE my_db; mysql> DROP TABLE my_user; mysql> ERROR 1051 (42S02): Unknown table 'my_user' mysql> CREATE TABLE my_user (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(255), group_id VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; mysql> ERROR 1005 (HY000): Can't create table 'my_db.my_user' …
11 mysql  innodb 

3
วิธีที่เร็วที่สุดในการดึงข้อมูลแถวสุดท้ายจากตารางคืออะไร
ฉันมีตาราง PostgreSQL Pricesโดยมีคอลัมน์: price (ทศนิยม) product_id (Int) นอกจากนี้ยังมีcreated_atและupdated_atคอลัมน์ ราคาอัพเดทเป็นประจำและฉันเก็บราคาเก่าไว้ในตาราง สำหรับผลิตภัณฑ์ที่กำหนดราคาสุดท้ายในตารางคือราคาปัจจุบัน วิธีที่มีประสิทธิภาพที่สุดในการรับราคาสุดท้ายสำหรับผลิตภัณฑ์เฉพาะคืออะไร: ดัชนีproduct_idและแบบสอบถามสำหรับระเบียนสุดท้าย เพิ่มคอลัมน์ที่สามactive(บูลีน) เพื่อทำเครื่องหมายราคาล่าสุดและสร้างดัชนีคอมโพสิต ( product_idและactive) หรืออย่างอื่น?

3
ตั้งค่าสุ่มจากชุด
ฉันต้องใส่ค่าสุ่มลงในฐานข้อมูล แต่ฉันไม่ต้องการที่จะจบลงด้วยข้อความที่สุ่มสมบูรณ์ (เช่น 7hfg43d3) แต่ฉันต้องการสุ่มเลือกค่าหนึ่งค่าที่จัดทำโดยตัวเอง

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

1
ฉันจะป้องกันการล็อคฐานข้อมูล SQLite ได้อย่างไร
จากคำถามที่พบบ่อย SQLite ฉันรู้ว่า: กระบวนการหลายอย่างสามารถเปิดฐานข้อมูลเดียวกันได้ในเวลาเดียวกัน กระบวนการหลายอย่างสามารถทำได้SELECTในเวลาเดียวกัน อย่างไรก็ตามมีเพียงกระบวนการเดียวเท่านั้นที่สามารถเปลี่ยนแปลงฐานข้อมูลได้ทุกเวลา ดังนั้นเท่าที่ผมเข้าใจว่าฉันสามารถ: 1) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT) 2) อ่านฐานข้อมูลจากหลายหัวข้อ ( SELECT) และเขียนจากหัวข้อเดียว ( CREATE, INSERT, DELETE) แต่ผมอ่านเกี่ยวกับการเขียนล่วงหน้าล็อกที่ให้ความเห็นพ้องมากขึ้นขณะที่ผู้อ่านไม่ปิดกั้นนักเขียนและนักเขียนจะไม่ปิดกั้นผู้อ่าน การอ่านและการเขียนสามารถดำเนินไปพร้อม ๆ กัน ในที่สุดฉันก็สับสนงงเมื่อฉันพบมันเมื่อมีการระบุ: นี่คือเหตุผลอื่น ๆ สำหรับการรับข้อผิดพลาด SQLITE_LOCKED: พยายามที่จะCREATEหรือDROPตารางหรือดัชนีในขณะที่SELECTคำสั่งยังคงค้างอยู่ กำลังพยายามเขียนลงในตารางในขณะที่ a SELECTกำลังทำงานบนตารางเดียวกัน พยายามทำสองอย่างSELECTในตารางเดียวกันในเวลาเดียวกันในแอปพลิเคชันแบบมัลติเธรดถ้า sqlite ไม่ได้ถูกตั้งค่าให้ทำเช่นนั้น fcntl (3, F_SETLK การเรียกใช้ไฟล์ DB ล้มเหลวซึ่งอาจเกิดจากปัญหาการล็อค NFS ตัวอย่างหนึ่งวิธีแก้ปัญหาสำหรับปัญหานี้คือการลบ mv ออกและคัดลอกกลับเพื่อให้มีค่า Inode ใหม่ ดังนั้นฉันต้องการชี้แจงให้ตัวเองจำเป็นต้องหลีกเลี่ยงการล็อคหรือไม่ ฉันสามารถอ่านและเขียนในเวลาเดียวกันจากสองกระทู้ที่แตกต่างกันได้หรือไม่ …
11 locking  sqlite 

5
คำสั่ง DELETE ขัดแย้งกับข้อ จำกัด การอ้างอิง
ฉันกำลังพยายามลบผู้ใช้ทั้งหมด แต่ได้รับข้อผิดพลาด: Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. แบบสอบถาม: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID > '13' GO ดูเหมือนว่าฉันต้องใช้on delete cascade;แต่ฉันติดอยู่
11 sql-server  t-sql 

3
ยูเนี่ยนช้า แต่คำถามทั้งสองแยกกันอย่างรวดเร็ว
Dunno ทำอะไรกับสิ่งนี้อีก ฉันมีตารางหนึ่งตารางที่มีจุดเริ่มต้นและคอลัมน์หยุดและฉันต้องการส่งคืนผลลัพธ์ของการรวมเข้าด้วยกันโดยเริ่มและหยุดและฉันต้องการความแตกต่างที่ชัดเจนระหว่างทั้งสอง ขณะนี้คำค้นหาทั้งสองทำงานแยกกันอย่างรวดเร็ว: SELECT UNIX_TIMESTAMP(CONVERT_TZ(start_dev, '+00:00', GetCarrierTimezone(a0.carrier_id))) AS alertStart, NULL AS alertStop, c0.name AS carrier_name, carrier_image, l0.Latitude, l0.Longitude FROM carriers AS c0 INNER JOIN start_stop AS a0 ON a0.carrier_id = c0.id INNER JOIN pcoarg AS l0 ON a0.startLogId = l0.id WHERE FIND_IN_SET(a0.carrier_id, '89467,1,64578,222625,45013') > 0 AND start_dev > '2013-03-11 …
11 mysql 

3
แนวทางปฏิบัติที่ดีที่สุดสำหรับตารางประวัติ / เวลา
สมมติว่าฉันมีวัตถุมีบางฟิลด์ที่ฉันต้องการติดตามประวัติและบางฟิลด์ที่ฉันไม่ต้องการติดตามประวัติ จากมุมมองของการทำให้เป็นมาตรฐานคือสกีมาดังต่อไปนี้: CREATE TABLE MyObject AS ( MyObjectId INT IDENTITY NOT NULL PRIMARY KEY, MyObjectField1 VARCHAR(100) NOT NULL, MyObjectField2 VARCHAR(100) NOT NULL, MyObjectField3 VARCHAR(100) NOT NULL, MyObjectTrackedField1 VARCHAR(100) NOT NULL, MyObjectTrackedField2 VARCHAR(100) NOT NULL, MyObjectTrackedField3 VARCHAR(100) NOT NULL, ) CREATE TABLE MyObjectHistory AS ( MyObjectHistoryId INT IDENTITY NOT NULL PRIMARY …

1
ความแตกต่างระหว่าง last_worker_time และ last_elapsed_time ใน DMV sys.dm_exec_query_stats คืออะไร?
สิ่งที่เป็นความหมายของlast_worker_timeและlast_elapsed_timeใน DMV sys.dm_exec_query_statsและสิ่งที่แตกต่างมันระหว่างพวกเขา? เมื่อฉันไฟด้านล่างแบบสอบถาม SELECT TOP 20 qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S, qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S FROM sys.dm_exec_query_stats qs order by qs.last_worker_time desc ฉันได้รับ reult เช่นด้านล่าง ในสิ่งที่ฉันสังเกตเห็นว่าทั้งสองมีค่าเท่ากันหรือเวลาที่ผ่านไปมากกว่าเวลาทำงานฉันอยากจะทำความเข้าใจกับความสำคัญของทั้งสองอย่างดังนั้นมันอาจช่วยฉันในการปรับแต่งการแสดง

1
เข้าสู่ระบบไฟล์ในบริการ windows PostgreSQL
ฉันต้องการทางเลือกอื่นสำหรับการรันคำสั่งต่อไปนี้: C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start. วิธีนี้เซิร์ฟเวอร์เริ่มต้นและเข้าสู่C:\yyy\log\pgsql.logระบบ เมื่อฉันพยายามที่จะลงทะเบียนเซิร์ฟเวอร์เป็นบริการ - ไม่มีตัวเลือกการบันทึกและเซิร์ฟเวอร์บันทึกไปยังตัวแสดงเหตุการณ์ จากเอกสาร pg_ctl: pg_ctl register [-N servicename] [-U ชื่อผู้ใช้] [-P รหัสผ่าน] [-D datadir] [-S a [uto] | d [emand]] [-w] [-t วินาที] [-s] [-o ตัวเลือก] ฉันจะบังคับให้เซิร์ฟเวอร์ลงชื่อเข้าใช้ไฟล์ได้อย่างไร หมายเหตุ: ฉันไม่ต้องการใช้โปรแกรมติดตั้งแบบคลิกเดียวฉันแค่ต้องการทำงานกับไบนารีที่ไม่ได้ซิป

6
ความพยายามดึงหน้าโลจิคัล (5: 65424) ในฐานข้อมูล 2 ล้มเหลว
ฉันได้รับข้อมูลต่อไปนี้SqlExceptionในการเรียกขั้นตอนที่เก็บไว้: ความพยายามดึงหน้าโลจิคัล (5: 65424) ในฐานข้อมูล 2 ล้มเหลว มันเป็นของหน่วยการจัดสรร 7349876362857938944 ไม่เป็น 4899918190390149120 System.Data.SqlClient.SqlException เกิดขึ้น Message = "ความพยายามดึงหน้าโลจิคัล (5: 65424) ในฐานข้อมูล 2 ล้มเหลวมันเป็นของหน่วยการจัดสรร 7349876362857938944 ไม่ใช่ 4899918190390149120 ที่มา = "ผู้ให้บริการข้อมูล SqlClient สุทธิ" ErrorCode = -2146232060 คลาส = 21 LineNumber = 257 จำนวน = 605 ขั้นตอน = "ispDisplayCount" เซิร์ฟเวอร์ = "10.10.1.1" สถานะ = 3 …


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