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

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

1
การสืบค้น JSONB ใน PostgreSQL
ฉันมีตารางpersonsซึ่งมีสองคอลัมน์และคอลัมน์ที่idใช้ JSONB data(ตารางนี้เพิ่งสร้างขึ้นเพื่อวัตถุประสงค์ในการสาธิตเพื่อเล่นกับการสนับสนุน JSON ของ PostgreSQL) ตอนนี้มันควรจะมีสองบันทึก: 1, { name: 'John', age: 30 } 2, { name: 'Jane', age: 20 } ตอนนี้ฉันควรจะได้ชื่อของทุกคนที่อายุมากกว่า 25 แล้วสิ่งที่ฉันได้ลองคือ: select data->'name' as name from persons where data->'age' > 25 น่าเสียดายที่นี่ทำให้เกิดข้อผิดพลาด ฉันสามารถแก้ไขได้โดยใช้->>แทน->แต่จากนั้นการเปรียบเทียบไม่ทำงานตามที่คาดไว้อีกต่อไปเนื่องจากไม่ใช่การเปรียบเทียบตัวเลข แต่การแสดงเป็นสตริง select data->'name' as name from persons where data->>'age' > '25' จากนั้นฉันก็พบว่าฉันสามารถแก้ปัญหาได้จริงโดยใช้->และนักแสดงไปที่int: select data->'name' …

2
หากมีอยู่แล้วปรับปรุงอื่นแทรก
ฉันพยายามที่จะสร้างSTORED PROCEDUREที่จะนำมาใช้ในตารางที่เรียกว่าUPDATE machineตารางนี้มีคอลัมน์ที่สาม ( machine_id, machine_nameและreg_id) ในตารางข้างต้นreg_id( INT) machine_idเป็นคอลัมน์ที่มีค่าสามารถเปลี่ยนแปลงได้สำหรับ ฉันต้องการกำหนดQUERY/ PROCEDUREเพื่อตรวจสอบว่ามีreg_idอยู่แล้วในตารางนั้น หากเป็นเช่นนั้นแสดงUPDATEว่าแถวนั้นมิฉะนั้นINSERTเป็นแถวใหม่ ใครบางคนได้โปรดช่วยให้ผมเขียนว่าQUERY/ PROCEDURE?
14 mysql 

2
ค้นหาเซสชันที่กำลังถือตารางชั่วคราว
เรามีฐานข้อมูล SQL Server 2005 ฐานข้อมูลชั่วคราวเต็ม โดยไปที่ Studio จัดการเซิร์ฟเวอร์ SQL ฉันสามารถดูตารางชั่วคราวทั้งหมดใน tempdb เป็นไปได้หรือไม่ที่จะบอกได้ว่าเซสชันใดกำลังถือตารางอุณหภูมิใดอยู่ เป็นการดีที่แบบสอบถามซึ่งจะแสดงรายการตารางอุณหภูมิที่ใช้โดยแต่ละเซสชั่น ขอบคุณ

5
สิทธิ์ใดที่จำเป็นสำหรับการตัดทอนตาราง
ฉันมีบัญชี SQL ที่มีสิทธิ์ต่อไปนี้ในฐานข้อมูล: db_executorบทบาทที่คุณเห็นบัญชีนี้เป็นสมาชิกของถูกสร้างขึ้นโดยสคริปต์นี้: CREATE ROLE [db_executor] AUTHORIZATION [dbo] GO GRANT EXECUTE TO [db_executor] GO เมื่อผมทำงานselect, update, insertหรือdeleteบนโต๊ะทำงานดี เมื่อฉันลองtruncateโต๊ะมันทำให้ฉันเกิดข้อผิดพลาดนี้: ไม่พบวัตถุ "TableName" เนื่องจากไม่มีอยู่หรือคุณไม่มีสิทธิ์ใช้งาน บัญชีนี้ได้รับอนุญาตอะไรหายไป?

2
คีย์หลักแบบคอมโพสิตคือการปฏิบัติที่ไม่ดี? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ฉันต้องการทราบว่าคีย์หลักแบบคอมโพสิตนั้นเป็นแนวปฏิบัติที่ไม่ดีหรือไม่และถ้าไม่แนะนำให้ใช้กับสถานการณ์ใด คำถามของฉันอ้างอิงจากบทความนี้ ส่วนเกี่ยวกับคีย์หลักผสม: การปฏิบัติที่ไม่ถูกต้องหมายเลข 6: คีย์หลักแบบรวม นี่เป็นจุดแย้งเนื่องจากผู้ออกแบบฐานข้อมูลจำนวนมากคุยกันในปัจจุบันเกี่ยวกับการใช้ฟิลด์ที่สร้างโดยอัตโนมัติจำนวนเต็มเป็นคีย์หลักแทนที่จะเป็นคอมโพสิตที่กำหนดโดยการรวมกันของสองฟิลด์หรือมากกว่า ปัจจุบันนี้ถูกกำหนดให้เป็น "แนวปฏิบัติที่ดีที่สุด" และโดยส่วนตัวแล้วฉันมักจะเห็นด้วยกับมัน อย่างไรก็ตามนี่เป็นเพียงการประชุมและแน่นอน DBEs อนุญาตให้นิยามของคีย์หลักแบบผสมซึ่งนักออกแบบหลายคนคิดว่าหลีกเลี่ยงไม่ได้ ดังนั้นเช่นเดียวกับความซ้ำซ้อนคีย์หลักแบบรวมเป็นการตัดสินใจออกแบบ ระวังแม้ว่าหากตารางของคุณที่มีคีย์หลักแบบคอมโพสิตคาดว่าจะมีหลายล้านแถวดัชนีที่ควบคุมคีย์คอมโพสิตสามารถเติบโตขึ้นจนถึงจุดที่ประสิทธิภาพการทำงานของ CRUD ลดลงอย่างมาก ในกรณีนี้จะเป็นการดีกว่ามากหากใช้คีย์หลักจำนวนเต็มแบบง่ายซึ่งดัชนีจะมีขนาดกะทัดรัดเพียงพอและสร้างข้อ จำกัด DBE ที่จำเป็นเพื่อรักษาเอกลักษณ์

4
MySQL: จะสร้างคอลัมน์ได้อย่างไรถ้าไม่มีอยู่?
ฉันกำลังพยายามสร้างคอลัมน์สำหรับตารางของฉันหากไม่มีอยู่จริง ฉันค้นคว้ามาเยอะ แต่ยังหาทางออกไม่ได้ นี่เป็นไปได้จริง ๆ ที่จะสร้างคอลัมน์แบบมีเงื่อนไขหรือไม่

4
มีวิธีแสดงคำสั่งการสร้างสำหรับดัชนีใน PostgreSQL
ฉันต้องสร้างดัชนีใหม่ใน PostgreSQL ซึ่งได้รับความเดือดร้อนดัชนีขยายตัว เนื่องจากฉันต้องการให้ดัชนีใช้งานได้ในขณะที่กำลังสร้างฉันไม่สามารถใช้ REINDEX ได้ ฉันจะสร้างดัชนีใหม่ด้วยชื่อใหม่แล้วปล่อยดัชนีเก่า มีวิธีใดบ้างที่จะเห็นคำสั่ง SQL ที่ใช้สร้างดัชนีเพื่อให้ฉันสามารถคัดลอกได้?
14 postgresql  index 

1
การค้นหาการพึ่งพาบนคอลัมน์เฉพาะ (วิธีที่ทันสมัยโดยไม่ต้องใช้ sysdepends)
ฉันต้องการค้นหาขั้นตอนการดูและการจัดเก็บทั้งหมดที่ใช้ไม่ใช่เฉพาะตารางบางตัวเท่านั้น แต่ยังมีคอลัมน์เฉพาะในตารางด้วย "ดูเหมือนว่า" ต่อไปนี้ใช้งานได้ แต่มีคำเตือนมากมายที่ต้องระวังด้วยวิธีนี้ (ไม่น่าเชื่อถือด้วยเหตุผลหลายประการที่จะเลิกเร็ว ๆ นี้ ฯลฯ ): SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName, (SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type FROM sysobjects so INNER JOIN syscolumns sc ON so.id = sc.id INNER JOIN sysdepends sd ON so.id = sd.depid and sc.colid = sd.depnumber …
14 sql-server 

2
ปัญหา PostgreSQL UPSERT ด้วยค่า NULL
ฉันมีปัญหากับการใช้คุณสมบัติใหม่ของ UPSERT ใน Postgres 9.5 ฉันมีตารางที่ใช้สำหรับรวบรวมข้อมูลจากตารางอื่น คีย์ผสมประกอบด้วย 20 คอลัมน์โดย 10 ซึ่งสามารถเป็นโมฆะได้ ด้านล่างฉันได้สร้างรุ่นที่เล็กกว่าของปัญหาที่ฉันมีโดยเฉพาะกับค่าเป็นศูนย์ CREATE TABLE public.test_upsert ( upsert_id serial, name character varying(32) NOT NULL, status integer NOT NULL, test_field text, identifier character varying(255), count integer, CONSTRAINT upsert_id_pkey PRIMARY KEY (upsert_id), CONSTRAINT test_upsert_name_status_test_field_key UNIQUE (name, status, test_field) ); การเรียกใช้คิวรีนี้ทำงานได้ตามต้องการ (แทรกครั้งแรกจากนั้นแทรกตามมาก็เพิ่มจำนวน): INSERT INTO …

3
วิธีที่ดีที่สุดในการรักษาขนาดล็อกไฟล์ SQL
ฉันค่อนข้างจะเป็น DBA ใหม่และฉันกำลังจัดการอินสแตนซ์ SQL Server 2012 ที่มีจำนวนกิจกรรมพอสมควร ฉันกำลังทำงานในโหมดการกู้คืนเต็มเพราะเราต้องการการกู้คืนเวลา ตอนนี้ฉันกำลังสำรองข้อมูลทั้งหมดของฐานข้อมูลและบันทึกทุกวันเวลาตีห้า ไฟล์บันทึกบางไฟล์มีขนาดสูงถึง 300GB และแม้หลังจากทำการสำรองข้อมูลไฟล์ก็จะไม่ลดขนาดลง ฉันสามารถทำให้พวกเขาลดขนาดได้โดยใช้สิ่งที่คล้ายกับ: BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn'; DBCC ShrinkFile([db1_log], 0); เมื่อฉันตรวจสอบ LSN ของไฟล์สำรองข้อมูลฉันเห็นสิ่งที่ชอบ: RESTORE headeronly FROM DISK …

1
การประมาณค่าСardinalityของภาคที่ครอบคลุมบางส่วน
ในขณะนี้ฉันกำลังพยายามหาวิธีที่ SQL Server จะประเมินความสำคัญของช่วงของเพรดิเคตที่ครอบคลุมขั้นตอนฮิสโตแกรมบางส่วน บนอินเทอร์เน็ตด้วยความคิดเชิงสถิติสำหรับการคำนวณแบบตามลำดับขั้นและสถิติที่มีค่าฉันพบคำถามที่คล้ายกันและ Paul White ให้คำตอบที่น่าสนใจ ตามคำตอบของ Paul สูตรการประมาณค่า cardinality สำหรับ predicates> = และ> (ในกรณีนี้ฉันสนใจเฉพาะรุ่นตัวประมาณ Cardinality อย่างน้อย 120) ดังนี้: สำหรับ>: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) สำหรับ> =: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) ฉันทดสอบแอปพลิเคชันของสูตรเหล่านี้ในตาราง[การผลิต]. [TransactionHistory]ตารางของฐานข้อมูลAdventureWorks2014ตามกริยาช่วงโดยใช้คอลัมน์TransactionDateและช่วงวันที่และเวลาระหว่าง …

1
ย้ายฐานข้อมูล SQL Server 2016 ชั่วคราวไปยัง SQL Server 2017 แล้วย้ายกลับ เป็นไปได้ไหม?
ถ้าฉันทำการสำรองข้อมูลของฐานข้อมูลจากอินสแตนซ์ของ SQL Server 2016 แล้วกู้คืนเป็นอินสแตนซ์ 2017 เพื่อทำงานบางอย่างกับมัน จากนั้นฉันจะสามารถหมุนและสำรองฐานข้อมูลนั้นจากอินสแตนซ์ 2017 และใช้เพื่อแทนที่เวอร์ชันเดิมในอินสแตนซ์ 2016 ได้หรือไม่

1
ทำไม RX-X lock นี้ไม่ปรากฏใน Extended Events?
ปัญหา ฉันมีคู่ของคำสั่งที่ทำให้เกิดการล็อค RX-X อย่างไรก็ตามเมื่อฉันใช้ Extended Events เพื่อดูการได้มาของการล็อคการได้รับ RX-X lock ไม่เคยปรากฏขึ้นมันจะออกมาเท่านั้น มันมาจากไหน? Repro นี่คือตารางของฉัน: CREATE TABLE dbo.LockTest ( ID int identity, Junk char(4) ) CREATE CLUSTERED INDEX CX_LockTest --not unique! ON dbo.LockTest(ID) --preload some rows INSERT dbo.LockTest VALUES ('data'),('data'),('data') นี่คือชุดปัญหาของฉัน: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN INSERT dbo.LockTest VALUES ('bleh') …

1
การตรวจสอบทางกายภาพเท่านั้นล้มเหลว แต่เต็มไปด้วยความสำเร็จ
ฉันกำลังดำเนินการ checkdb พร้อมตัวเลือก physical_only และล้มเหลวโดยมีข้อผิดพลาดหลายอย่างเช่นด้านล่าง: ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: ID วัตถุ 1557580587, ดัชนี ID 1, ID พาร์ติชัน 72057594088456192, ID หน่วยจัดสรร 72057594177454080 (พิมพ์ข้อมูลในแถว) โหนดข้อมูลแบบปิดแถวที่หน้า (1: 13282192), ช่อง 3, ข้อความ ID 6370769698816 ถูกอ้างอิงโดยหน้า (0: 0), ช่อง 0 แต่ไม่เห็นในการสแกน ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: …

2
การแสดงแผนการดำเนินการโดยประมาณจะสร้าง CXPACKET, PAGELATCH_SH และ LATCH_EX [ACCESS_METHODS_DATASET_PARENT] รอ
ผมใช้ Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) ใน 4 vCPU VM กับmax degree of parallelismชุด2และชุดcost threshold for parallelism50 ในตอนเช้าเมื่อพยายามแสดงแผนการดำเนินการโดยประมาณสำหรับคิวรีแบบเลือก TOP 100ฉันพบว่าต้องรอเป็นจำนวนมากและการดำเนินการเพื่อแสดงแผนโดยประมาณใช้เวลาไม่กี่นาทีบ่อยครั้งในช่วง 5 - 7 นาที อีกครั้งนี้ไม่ได้ปฏิบัติจริงของแบบสอบถามนี้เป็นเพียงกระบวนการเพื่อแสดงแผนการดำเนินการโดยประมาณ sp_WhoIsActiveจะแสดงPAGEIOLATCH_SHรอหรือLATCH_EX [ACCESS_METHODS_DATASET_PARENT]รอและเมื่อฉันเรียกใช้สคริปต์WaitingTasks.sql ของ Paul Randalในระหว่างการดำเนินการก็จะแสดงการCXPACKETรอด้วยเธรดผู้ทำงานที่แสดงการPAGEIOLATCH_SHรอ: * ฟิลด์คำอธิบายทรัพยากร = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen เธรดผู้ปฏิบัติงานดูเหมือนจะนำstatsตารางทั้งหมดมาไว้ในหน่วยความจำ (เช่นหมายเลขหน้าเหล่านั้นรวมถึงหมายเลขหน้าถัดไปที่แสดงจากแบบสอบถามของ Paul Randal กลับไปยังคีย์คลัสเตอร์สำหรับstatsตาราง) เมื่อแผนกลับมามันเป็นช่วงเวลาที่เหลือของวันทันทีหลังจากที่ฉันเห็นการstatsขัดสีส่วนใหญ่ของตารางจากแคชที่มีเพียงระเบียนต่าง ๆ ที่เหลืออยู่เท่านั้น …

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