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

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

3
แทรกความเร็วสำหรับชุดงานขนาดใหญ่
ในแอปพลิเคชันของฉัน INSERT ของฉันดูเหมือนจะใช้เวลาอย่างมาก ฉันมีวัตถุจำนวนมากในหน่วยความจำ (~ 40-50,000) ซึ่งฉันต้องการแทรกลงในตาราง ลองดูตารางตัวอย่าง CREATE TABLE bill ( id BIGINT(20) PRIMARY KEY, amount INT(11) DEFAULT 0, bill_date DATETIME DEFAULT NOW(), INDEX (bill_date) ) ENGINE=InnoDB การใช้ 3 แถวเป็นขนาดแบทช์ของฉันต่อไปนี้เป็นแนวทางที่ฉันคิดได้สำหรับการแทรก วิธีที่ 1 - สร้างและยิงเม็ดมีด 3 เม็ด INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00'); INSERT INTO bill (amount, …
10 mysql  innodb  insert  java  jdbc 

3
การเปลี่ยนพอร์ต PostgreSQL โดยใช้บรรทัดคำสั่ง
พอร์ตเริ่มต้น PostgreSQL ของฉันคือ 5432 ฉันต้องการเปลี่ยนพอร์ตเริ่มต้นโดยใช้บรรทัดคำสั่ง (ใน Windows 7) ฉันเห็นโซลูชันนี้มาก่อน: /programming/187438/want-to-change-pgsql-port ฉันพยายามเรียกใช้คำสั่งต่อไปนี้ แต่มันล้มเหลว: postgres --p 5431 มีคนบอกวิธีเปลี่ยนพอร์ตโดยใช้บรรทัดคำสั่งได้ไหม

3
การระบุว่าค่าใดไม่ตรงกับแถวของตาราง
ฉันต้องการให้สามารถตรวจสอบได้อย่างง่ายดายว่าตัวระบุที่ไม่ซ้ำกันอยู่ในตารางของผู้ที่ระบุในแบบสอบถาม เพื่ออธิบายให้ดียิ่งขึ้นนี่คือสิ่งที่ฉันต้องทำตอนนี้เพื่อตรวจสอบ ID ของรายการ "1, 2, 3, 4" ที่ไม่มีอยู่ในตาราง: SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')สมมติว่าตารางไม่มีแถวที่มี ID 2 ดัมพ์ผลลัพธ์ลงใน Excel เรียกใช้ VLOOKUP ในรายการต้นฉบับที่ค้นหาแต่ละค่าของรายการในรายการผลลัพธ์ VLOOKUP ใด ๆ ที่ส่งผลให้#N/Aมีค่าที่ไม่ได้เกิดขึ้นในตาราง ฉันคิดว่าต้องมีวิธีที่ดีกว่าในการทำสิ่งนี้ ฉันกำลังมองหาสิ่งที่ต้องการ รายการที่จะตรวจสอบ -> แบบสอบถามบนตารางเพื่อตรวจสอบ -> สมาชิกของรายการที่ไม่ได้อยู่ในตาราง


2
ฉันจะเพิ่มนาทีในประเภทข้อมูลเวลาได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่แทรกสองระเบียนลงในตารางความแตกต่างระหว่างบันทึกคือคอลัมน์เวลาของระเบียนที่สองอยู่@MinToAddหลังแรก: CREATE PROCEDURE CreateEntry /*Other columns*/ @StartTime time(2), @EndTime time(2), @MinutesToAdd smallint AS BEGIN SET NOCOUNT ON; SET @MinutesToAdd = @MinutesToAdd % 1440; --Prevent overflow if needed? IF (@MinutesToAdd > 0) BEGIN INSERT INTO ClientNotification (/*Other columns*/ startTime, endTime) OUTPUT inserted.id VALUES (/*Other columns*/ @StartTime, @EndTime), (/*Other columns*/ @StartTime + …

1
pg_dump และข้อผิดพลาด: ไม่มี chunk number 0 สำหรับค่าขนมปัง
ฉันใช้ PostgreSQL 8.4.15 ขณะทำงานpg_dumpเพื่อสำรองฐานข้อมูลฉันได้รับข้อผิดพลาดดังต่อไปนี้: pg_dump: SQL command failed pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321 pg_dump: The command was: COPY public.my_table (id, .... all the columns ...) เมื่อค้นหาข้อความแสดงข้อผิดพลาดนี้ฉันพบการอ้างอิงสองสามรายการ ( ที่นี่และที่นี่ ) ที่แนะนำให้สร้างดัชนีตารางอีกครั้ง (ในการสนทนาเหล่านี้มีการอ้างอิงถึงการสืบค้นpg_classตารางเพื่อค้นหาpg_toast_XXXXXXค่าที่ถูกต้องแต่ดูเหมือนว่าเป็นเพราะมันไม่ได้แสดงในข้อความแสดงข้อผิดพลาดของพวกเขาฉันข้ามส่วนนี้เพราะฉันมีค่าที่แสดงในข้อความแสดงข้อผิดพลาด ฉันเดาว่ามันอาจจะสะดวกกว่าเนื่องจาก PostgreSQL รุ่นที่ใหม่กว่า) ฉันวิ่งต่อไปนี้: REINDEX table pg_toast.pg_toast_987654321; VACUUM …
10 postgresql 

3
ฐานข้อมูลเซิร์ฟเวอร์ sql sharding - จะทำอย่างไรกับข้อมูลทั่วไป / ข้อมูลที่ไม่ใช้เศษ
เรามีฐานข้อมูลระดับองค์กรขนาดใหญ่มาก เป็นส่วนหนึ่งของรูปแบบธุรกิจของเราผู้ใช้เว็บทุกคนเข้าเยี่ยมชมเว็บเซิร์ฟเวอร์ของเราในเวลาเดียวกันในแต่ละเดือน ปริมาณการใช้งานหนักมากและยังคงเติบโตยิ่งหนักยิ่ง บริษัท ใหญ่ขึ้น การเพิ่มประสิทธิภาพ sql proc ได้รับการดำเนินการและฮาร์ดแวร์ได้รับการปรับขนาดให้อยู่ในระดับที่สูงมากแล้ว เราต้องการทำลายฐานข้อมูลในขณะนี้เพื่อให้แน่ใจว่าเราสามารถรองรับการเติบโตของ บริษัท และการโหลดในอนาคต เราได้ตัดสินใจแล้วว่าข้อมูลใดควรถูกทิ้ง มันเป็นส่วนหนึ่งของฐานข้อมูลของเราซึ่งใช้อย่างมาก อย่างไรก็ตามคำถามของฉันเกี่ยวกับข้อมูลที่ไม่ใช้ร่วมกันซึ่งเป็นเรื่องธรรมดา / สากล ตัวอย่างของข้อมูลเช่นนี้อาจเป็นตารางคลังตัวอย่างหรืออาจเป็นตารางพนักงานตารางผู้ใช้เป็นต้น ฉันเห็นสองตัวเลือกในการจัดการข้อมูลทั่วไป / สากลนี้: 1) การออกแบบ 1 - วางข้อมูลทั่วไป / สากลในฐานข้อมูลภายนอก การเขียนทั้งหมดจะเกิดขึ้นที่นี่ ข้อมูลนี้จะถูกทำซ้ำลงไปในแต่ละชิ้นส่วนทำให้แต่ละชิ้นส่วนสามารถอ่านข้อมูลนี้และเข้าร่วมภายในกับข้อมูลนี้ในโปรแกรม t-sql 2) การออกแบบ 2 - ให้แต่ละสำเนาของตัวเองของข้อมูลทั่วไป / สากลทั้งหมด ปล่อยให้แต่ละชิ้นส่วนจะเขียนลงในตารางเหล่านี้และใช้การจำลองแบบ sql merge เพื่ออัปเดต / ซิงค์ข้อมูลนี้กับส่วนอื่นทั้งหมด ความกังวลเกี่ยวกับการออกแบบ # 1 1) ปัญหาการทำธุรกรรม: หากคุณมีสถานการณ์ที่คุณต้องเขียนหรืออัปเดตข้อมูลเป็นเศษแล้วเขียน …
10 sql-server 

2
ฉันควรสร้างดัชนีใหม่หลังจากตัดทอน / แทรกขนาดใหญ่หรือไม่
ฉันมีขั้นตอนการจัดเก็บที่ตัดทอนบางตารางที่มีแถวประมาณ 1.75M ในแต่ละแถวก่อนที่จะแทรกข้อมูลใหม่ (ขึ้นอยู่กับข้อมูลในตารางอื่น ๆ การคำนวณ ฯลฯ ) โครงร่างพื้นฐานง่ายมาก: ตัดทอนตาราง แทรก 1.75M แถวใน 'batches' ประมาณ 75,000 ต่อเวลา ฉันสงสัยว่าฉันควรสร้างดัชนีใหม่อีกครั้งอย่างชัดเจนตลอดเวลาในกระบวนการนี้หรือไม่? เช่น ตัดทอนตาราง ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [หรืออะไรที่คล้ายกัน] แทรกแถว 1.75M หรือบางที ALTER INDEX ALL ON xxx DISABLE ตัดทอนตาราง แทรกแถว 1.75M ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [หรืออะไรที่คล้ายกัน] …

4
ฉันจะส่งออกชุดย่อยของ tabledata จากฐานข้อมูล prodution ไปยังฐานข้อมูลการทดสอบในพื้นที่ได้อย่างไร
เรามีฐานข้อมูลการผลิต postgres ที่ค่อนข้างใหญ่: ~ 20GB ฐานข้อมูล PostgreSQL โฮสต์บน heroku ฉันต้องการคัดลอกชุดย่อยขนาดเล็กของข้อมูลตารางไปยังฐานข้อมูลท้องถิ่นของฉันเพื่อให้ฉันสามารถเรียกใช้การทดสอบบางอย่างกับพวกเขาโดยไม่ต้องทำงานเกี่ยวกับการผลิต ฉันไม่ต้องการสร้างข้อมูลตัวอย่างด้วยตนเอง แต่ควรใช้ข้อมูลที่มีอยู่แล้วในสภาพแวดล้อมการผลิต ประมาณ 100 แถวจากแต่ละตารางในฐานข้อมูลจะเพียงพอ มีวิธีง่ายๆในการทำสิ่งนี้หรือไม่?

1
เป็นวิธีที่มีประสิทธิภาพมากที่สุดในการชุดคำสั่ง UPDATE ใน MySQL คืออะไร?
ฉันกำลังเขียนแอปพลิเคชันที่ต้องการล้างการอัปเดตจำนวนมากไปยังฐานข้อมูลเป็นระยะเวลานานและฉันติดอยู่กับวิธีเพิ่มประสิทธิภาพการสืบค้น ขณะนี้ฉันกำลังใช้INSERT INTO ... VALUES (..), (..) ON DUPLICATE KEY UPDATEซึ่งทำงานเพื่อแบทช์ค่าทั้งหมดเป็นหนึ่งแบบสอบถาม แต่ดำเนินการช้าๆเลือดตาแทบกระเด็นบนตารางขนาดใหญ่ ฉันไม่จำเป็นต้องแทรกแถวจริงๆ วิธีอื่นที่ฉันเห็นคือการอัปเดตโดยใช้SET value = CASE WHEN...(ซึ่งยากที่จะสร้างเนื่องจากวิธีที่ฉันสร้างคิวรีและฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพCASEของคีย์หลายแสน / พันปุ่ม) และเรียงต่อกันหลาย ๆ อย่าง การปรับปรุง สิ่งเหล่านี้จะเร็วกว่าวิธีการปัจจุบันของฉันหรือไม่ มันทำให้ฉันงุนงงเท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีที่มีประสิทธิภาพและไร้เหตุผลในการทำสิ่งนี้ใน MySQL หากไม่มีวิธีที่เร็วกว่าจริงON DUPLICATE KEYๆ มันจะคุ้มไหมที่จะเปลี่ยนมาใช้ PostgreSQL และใช้UPDATE FROMไวยากรณ์ของมัน คำแนะนำอื่น ๆ ยังชื่นชมอย่างมาก! แก้ไข: นี่คือหนึ่งในตารางที่ได้รับการปรับปรุงบ่อยครั้ง ฉันได้ลบชื่อคอลัมน์เนื่องจากไม่เกี่ยวข้อง CREATE TABLE IF NOT EXISTS `table` ( `id` int(10) unsigned …
10 mysql  update 

2
การเปลี่ยนแปลง sqlnet.ora หรือ tnsnames.ora จำเป็นต้องรีบูตไหม
เมื่อใดก็ตามที่คุณเปลี่ยนไฟล์ sqlnet.ora หรือ tnsnames.ora ของออราเคิลระบบจะต้องรีบูตหรือไม่? ในอินสแตนซ์ของฉันฉันมีไคลเอ็นต์ Oracle เท่านั้นที่ติดตั้งบนเครื่องที่ฉันอ้างถึง แต่ด้วยความอยากรู้อยากเห็นสำหรับการติดตั้งเซิร์ฟเวอร์ Oracle หมายความว่าอย่างไร

2
SELECT / INSERT Deadlock
อินสแตนซ์นี้โฮสต์ฐานข้อมูล SharePoint 2007 (SP) เราประสบปัญหาการหยุดชะงัก SELECT / INSERT จำนวนมากต่อตารางที่ใช้งานหนักจำนวนหนึ่งในฐานข้อมูลเนื้อหา SP ฉัน จำกัด ทรัพยากรที่เกี่ยวข้องให้แคบลงกระบวนการทั้งสองต้องการล็อคในดัชนีที่ไม่ใช่คลัสเตอร์ INSERT ต้องการล็อค IX บนทรัพยากร SELECT และ SELECT ต้องการล็อค S บนทรัพยากร INSERT กราฟเดดล็อกแสดงให้เห็นและสามทรัพยากร 1. ) สองรายการจาก SELECT (เธรดขนานผู้ผลิต / ผู้บริโภค) และ 2) INSERT ฉันได้แนบกราฟการหยุดชะงักเพื่อตรวจสอบของคุณ เนื่องจากนี่คือรหัส Microsoft และโครงสร้างตารางเราไม่สามารถทำการเปลี่ยนแปลงใด ๆ อย่างไรก็ตามฉันได้อ่านบนเว็บไซต์ MSFT SP ว่าพวกเขาแนะนำให้ตั้งค่าตัวเลือกการกำหนดค่าระดับอินสแตนซ์ MAXDOP เป็น 1 เนื่องจากอินสแตนซ์นี้มีการใช้งานร่วมกันระหว่างฐานข้อมูล / แอปพลิเคชันอื่น …

3
ผู้ใช้ไม่สามารถดูตารางใน schema ที่ไม่ใช่ค่าเริ่มต้นใน SSMS
ฉันมีปัญหาในการตั้งค่าการVIEW DEFINITIONอนุญาตอย่างเหมาะสมในระดับสคีมาสำหรับผู้ใช้รายหนึ่งของฉัน ฉันสร้างคีมาTestSchemaแล้วเพิ่มบางตาราง ผู้ใช้ปัจจุบันมีสิทธิ์ในการเข้าถึงการตั้งค่าและปรับเปลี่ยนตาราง ( SELECT, UPDATE, DELETEฯลฯ ) ผ่านdbo_datareaderและdbo_datawriterบทบาท อย่างไรก็ตามพวกเขาไม่สามารถมองเห็นตารางใด ๆ ในตัวสำรวจวัตถุ SSMS ฉันลองให้สิทธิ์เพื่อดูคำจำกัดความ: grant view definition on SCHEMA :: [TestSchema] to [User] นั่นไม่ได้ผล ฉันพยายามตั้งค่าการอนุญาตระดับตาราง: grant view definition on [TestSchema].[NewTable] to [User] นั่นก็ไม่ได้ผล จากนั้นฉันก็ลองแค่ให้ผ้าห่ม: grant view definition to [User] และนั่นก็ใช้ได้ ตอนนี้พวกเขาสามารถมองเห็นTestSchemaได้เช่นเดียวกับสกีมาอื่น ๆ ที่พวกเขาไม่ควรเข้าถึง เป้าหมายของฉันที่นี่คืออนุญาตให้ผู้ใช้ดูตารางทั้งหมดภายในสคีมาที่กำหนด ฉันจะทำให้สำเร็จได้อย่างไร หากฉันควรจะทำสิ่งนี้โดยค่าเริ่มต้นฉันควรตรวจสอบสิทธิ์ใดบ้างเพื่อค้นหาสาเหตุที่ทำไม่ได้

1
“ * รหัสผ่าน ------------” หมายความว่าอย่างไรในรายงานการหยุดชะงักของโปรไฟล์
ใน SQL Server 2008 R2 ฉันได้รับรายงานการหยุดชะงักหลายครั้งที่มี "* รหัสผ่าน ------------" ในบัฟเฟอร์อินพุต ดูเหมือนว่าจะเป็นการโจมตี แต่ในกรณีนั้นฉันไม่รู้เหตุผลหรือชนิดของการโจมตี (บันทึกถูกสร้างขึ้นโดย DBA ผู้เชี่ยวชาญมีประสบการณ์มากมายและบอกฉันว่าไม่ใช่ฉัน) ไม่มีใครรู้ว่ามันคืออะไร? ขอบคุณ! ตัวอย่าง: <?xml version="1.0"?> <blocked-process> <process id="process879948" taskpriority="0" logused="0" waitresource="KEY: 5:72057602473263104 (1d69201d0ba6)" waittime="5185" ownerId="88389135" transactionname="SELECT" lasttranstarted="2012-09-25T18:11:02.507" XDES="0x1f7d2a590" lockMode="S" schedulerid="2" kpid="4552" status="suspended" spid="86" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2012-09-25T18:11:02.507" lastbatchcompleted="2012-09-25T18:11:02.507" lastattention="2012-09-25T18:07:35.740" clientapp=".Net SqlClient Data Provider" hostname="IP-xxxxxxxx" …

1
การเริ่มต้นเซิร์ฟเวอร์ PostgreSQL หลังจาก HDD ขัดข้องจะส่งผลให้เกิดสถานะล้มเหลว
ฉันใช้กับFedora 15 PostgreSQL 9.1.4Fedora ล้มเหลวเมื่อเร็ว ๆ นี้หลังจากนั้น: ความพยายามเริ่มต้นเซิร์ฟเวอร์ PostgreSQL: service postgresql-9.1 start จะช่วยให้ Starting postgresql-9.1 (via systemctl): Job failed. See system logs and 'systemctl status' for details. [FAILED] แม้ว่าเซิร์ฟเวอร์เริ่มทำงานตามปกติเมื่อฉันเริ่มต้นเซิร์ฟเวอร์เป็นครั้งแรกหลังจากรีบูตระบบ แต่ความพยายามในการใช้psqlทำให้เกิดข้อผิดพลาดนี้: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on …
10 linux  postgresql 

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