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

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

2
ได้รับประโยชน์จากสคีมาทั้งหมดในฐานข้อมูลหรือไม่
ฉันต้องการGRANT USAGEผู้ใช้ / บทบาทสำหรับฐานข้อมูลที่กำหนด ฐานข้อมูลมีสกีมาจำนวนมาก ฉันรู้ว่ามีON ALL TABLES IN SCHEMAแต่ฉันต้องการ "schemas ทั้งหมด" ฉันพยายามGRANT USAGE .. ON DATABASEแต่ก็เห็นได้ชัดว่าผิด (มันไม่มีอยู่จริง ) นี่สำหรับ Postgres 9.3 หรือ 9.4 มันเป็นเซิร์ฟเวอร์ที่อยู่บน AWS RDS

1
เครื่องมือเพิ่มประสิทธิภาพของ SQL Server ประมาณจำนวนแถวในตารางที่เข้าร่วมอย่างไร
ฉันใช้คำค้นหานี้ในฐานข้อมูลAdventureWorks2012 : SELECT s.SalesOrderID, d.CarrierTrackingNumber, d.ProductID, d.OrderQty FROM Sales.SalesOrderHeader s JOIN Sales.SalesOrderDetail d ON s.SalesOrderID = d.SalesOrderID WHERE s.CustomerID = 11077 ถ้าฉันดูแผนการดำเนินการโดยประมาณฉันจะเห็นสิ่งต่อไปนี้: การค้นหาดัชนีเริ่มต้น (ด้านบนขวา) ใช้ดัชนี IX_SalesOrderHeader_CustomerID และค้นหาตามตัวอักษร 11077 โดยมีค่าประมาณ 2.6192 แถว ถ้าฉันใช้DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAMมันแสดงว่าค่า 11077 อยู่ระหว่างสองคีย์ตัวอย่าง 11019 และ 11091 จำนวนเฉลี่ยของแถวที่แตกต่างระหว่าง 11019 และ 11091 คือ 2.619718 หรือปัดเศษเป็น 2.61972 …

2
การอัพเดตดัชนีเซิร์ฟเวอร์ SQL หยุดชะงัก
ฉันมี 2 แบบสอบถามซึ่งเมื่อทำงานในเวลาเดียวกันจะทำให้เกิดการหยุดชะงัก แบบสอบถาม 1 - อัปเดตคอลัมน์ซึ่งรวมอยู่ในดัชนี (ดัชนี 1): update table1 set column1 = value1 where id = @Id ใช้ X-Lock บน table1 จากนั้นลอง X-Lock บน index1 แบบสอบถาม 2: select columnx, columny, etc from table1 where {some condition} นำ S-Lock ไปที่ index1 จากนั้นลอง S-Lock บน table1 มีวิธีการป้องกันการหยุดชะงักในขณะที่รักษาข้อความค้นหาเดียวกันหรือไม่ ตัวอย่างเช่นฉันสามารถใช้ X-Lock ในดัชนีในธุรกรรมการปรับปรุงก่อนการปรับปรุงเพื่อให้แน่ใจว่าการเข้าถึงตารางและดัชนีอยู่ในลำดับเดียวกัน …

1
สถิติ. ฮิสโทแกรมหลายสีเป็นไปได้หรือไม่
ฉันกำลังคิดถึงสถานการณ์ที่ฉันมีสองคอลัมน์ที่มีความหนาแน่นสูง แต่คอลัมน์เหล่านี้ไม่ได้เป็นอิสระ คำนิยาม นี่คือคำจำกัดความของตารางที่ฉันสร้างขึ้นเพื่อวัตถุประสงค์ในการทดสอบ CREATE TABLE [dbo].[StatsTest]( [col1] [int] NOT NULL, --can take values 1 and 2 only [col2] [int] NOT NULL, --can take integer values from 1 to 4 only [col3] [int] NOT NULL, --integer. it has not relevance just to ensure that each row is different [col4] AS …

2
การใช้พื้นที่บน sys.allocation_units และ sp_spaceused
มันเป็นความจริงที่รู้จักกันว่า DMVs ไม่ได้เก็บข้อมูลที่ถูกต้องเกี่ยวกับจำนวนหน้าและจำนวนแถว อย่างไรก็ตามเมื่อคุณอัปเดตสถิติฉันไม่สามารถเห็นได้ว่าทำไมพวกเขาถึงไม่ทำ ฉันกำลังทำงานกับเครื่องมือตรวจสอบ, ต้องการทราบขนาดดิสก์ของแต่ละดัชนีและข้อมูล ฯลฯ ในที่สุดฉันต้องการค้นหาปัจจัยเติมที่เหมาะสมและสิ่งอื่น ๆ เป็นต้น พื้นที่ที่ใช้โดยฟังก์ชั่นของฉันและ sp_spaceused เก่าแตกต่างกันเล็กน้อยในการใช้พื้นที่ แต่ไม่ได้อยู่ในการบันทึก คุณเห็นหรือไม่ว่ามีอะไรขาดหายไปในการเลือกของฉัน นี่คือ sp_spaceused (จากนั้นฉันแปลงตัวเลขเป็น MB): sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused แต่เมื่อฉันเลือกตัวเลือกโค้ดด้านล่าง \ ภาพด้านล่างฉันได้รับตัวเลขที่แตกต่างกันเล็กน้อย SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS …

1
PostgreSQL บ่นเกี่ยวกับหน่วยความจำที่แชร์ แต่ดูเหมือนว่าหน่วยความจำที่แชร์จะไม่เป็นไร
ฉันได้ทำคีมาแบบเข้มข้นแล้วปล่อยและสร้างบนเซิร์ฟเวอร์ PostgreSQL แต่ตอนนี้บ่น .. : WARNING: out of shared memory ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction. แต่ปัญหายังคงอยู่หาก PostgreSQL เพิ่งเริ่มต้นใหม่service postgresql restartฉันสงสัยว่า max_locks_per_transaction จะไม่ปรับอะไรเลย ฉันค่อนข้างจะเหินห่างเพราะรายการแก้ไขปัญหาสำหรับข้อผิดพลาดนี้ไม่ทำงานสำหรับฉัน ข้อมูลเพิ่มเติม 1409291350:รายละเอียดบางอย่างหายไป แต่ฉันเก็บผลลัพธ์ SQL หลักไว้ postgres=# SELECT version(); PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit และ: …

1
ใน Postgres วิธีรับรายการ savepoint ที่กำหนดในปัจจุบันต้องทำอย่างไร?
ฉันใช้ postgres SAVEPOINTซึ่งสร้าง savepoint ใหม่ภายในธุรกรรมปัจจุบันและต้องการแสดงรายการของ savepoint ที่กำหนดไว้ในปัจจุบันในการเชื่อมต่อ เพื่อให้แม่นยำยิ่งขึ้น: ฉันต้องการตรวจสอบชื่อที่จะไม่เรียกข้อผิดพลาด "no savepoint" ในการเชื่อมต่อ

2
ทางเลือก EAV สำหรับฟิลด์แบบไดนามิกในคลังข้อมูลสคีมา
ฉันต้องการสนับสนุนฟิลด์และค่าแบบไดนามิกในคลังข้อมูลขนาดใหญ่สำหรับจัดเก็บบันทึกคำขอ API กรณีผู้ใช้ของฉันคือฉันต้องเก็บสตริงแบบสอบถามคำขอ API ทั้งหมดและสามารถดำเนินการค้นหากับพวกเขาในอนาคต (ดังนั้นจึงไม่ใช่แค่การจัดเก็บ ดังนั้นฉันไม่สามารถใช้หยดสำหรับพวกเขา) เช่น http://example.com/?action=test&foo=abc&bar=def... ฉันต้องเก็บการfield => valueแมปทั้งหมดเช่น(action => test), (foo => abc), (bar => def)และเนื่องจากฟิลด์นั้นเป็นแบบไดนามิกวิธีแก้ปัญหาเดียวที่ฉันได้พบคือการใช้เอนทิตี - แอตทริบิวต์ - ค่า - อย่างไรก็ตามผู้คนพูดว่ามันเป็นการออกแบบที่แย่มาก ดังนั้นให้พิจารณากรณีการใช้งานของฉันด้านบนสิ่งที่จะเป็นทางเลือกที่เหมาะสมกับ EAV? สคีมาปัจจุบันของฉันโดยใช้ KAV ตารางrequests (id, timestamp, uri) เช่น(1, 149382220, '/') ตารางparams (request_id, key, value) เช่น(1, 'action', 'test'), (1, 'foo', 'abc'), (1, 'bar', 'def') …

11
วิธีค้นหาความแตกต่างของเนื้อหาระหว่าง 2 ตาราง SQL และสร้างข้อมูลให้ตรงกัน SQL
ฉันจะค้นหาความแตกต่างของข้อมูลระหว่างสองตารางที่มี schema ที่แน่นอนได้อย่างไรและจะสร้าง SQL การซิงโครไนซ์เพื่อให้ได้ผลลัพธ์สหภาพ (โดยไม่ซ้ำกัน) ได้อย่างไร นี่คือ 2 ตาราง: SOURCE01.dbo.Customers (31,022 rows) TARGET01.dbo.Customers (29,300 rows) สคีมาของแต่ละตารางคือ: [CustomerId] : nvarchar(255) [CustomerSerializedProfile]: nvarchar(max) [CreatedDatetime] : DateTime

1
การหยุดชะงักเมื่ออัพเดตแถวต่าง ๆ ด้วยดัชนีที่ไม่ทำคลัสเตอร์
ฉันกำลังแก้ไขปัญหาการหยุดชะงักในขณะที่ฉันสังเกตเห็นว่าพฤติกรรมการล็อคแตกต่างกันเมื่อฉันใช้ดัชนีแบบคลัสเตอร์และแบบไม่รวมกลุ่มบนฟิลด์รหัส ปัญหาการหยุดชะงักดูเหมือนว่าจะได้รับการแก้ไขหากดัชนีหรือคีย์หลักที่ถูก clusted ถูกนำไปใช้กับฟิลด์ id ฉันมีการทำธุรกรรมที่แตกต่างกันที่ทำการอัปเดตแถวที่แตกต่างกันอย่างน้อยหนึ่งรายการเช่นธุรกรรม A จะอัปเดตแถวที่มี ID = a เท่านั้น tx B จะแตะแถวที่มี ID = b เท่านั้น และฉันเข้าใจดีว่าหากไม่มีดัชนีการอัปเดตจะได้รับการอัพเดตการล็อคสำหรับแถวทั้งหมดและแปลงเป็นล็อคแบบเอกสิทธิ์เฉพาะบุคคลเมื่อจำเป็นซึ่งในที่สุดจะนำไปสู่การหยุดชะงัก แต่ฉันล้มเหลวในการค้นหาสาเหตุที่มีดัชนีที่ไม่ใช่คลัสเตอร์การหยุดชะงักยังคงอยู่ที่นั่น (แม้ว่าอัตราการเข้าชมดูเหมือนจะลดลง) ตารางข้อมูล: CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [userName] [nvarchar](255) NULL, [name] [nvarchar](255) NULL, [phone] [nvarchar](255) NULL, [password] [nvarchar](255) NULL, [ip] [nvarchar](30) NULL, [email] [nvarchar](255) NULL, [pubDate] …

4
เหตุใด Mongo ติดอยู่ใน STARTUP2
ฉันมีMongoชุดแบบจำลองที่มีสองสามวินาที กล่องซึ่งโฮสต์อินสแตนซ์สำรองเกิดข้อผิดพลาดและสูญเสียฐานข้อมูล ฉันเริ่มต้นMongoอินสแตนซ์สำรองอีกครั้งและตอนนี้มันติดอยู่ใน STARTUP2 นานกว่า 12 ชั่วโมง มันสมเหตุสมผลหรือไม่ เอกสารดังกล่าวMongoควรอยู่ในช่วงเวลาสั้น ๆ ก่อนที่จะเข้าสู่สถานะการกู้คืน STARTUP2 หมายความว่าอย่างไร มันจะคัดลอกฐานข้อมูลจากหลักหรือไม่ ฉันจะตรวจสอบได้อย่างไร (สมมติว่า Mongo ทำงานอยู่ใน Linux)
13 mongodb  recovery 

2
วิธีดูคิวรีของเซสชันอื่นใน pg_stat_activity โดยไม่ต้องเป็นผู้ใช้ขั้นสูง
ฉันมีฐานข้อมูล Postgresql 9.2 ผู้ใช้สองคนถูกสร้างบนฐานข้อมูลนี้ เมื่อฉันทำแบบสอบถามต่อไปนี้เป็น superuser ฉันสามารถเห็นทุกสิ่ง select * from pg_stat_activity อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะได้ผลลัพธ์เดียวกันโดยไม่ต้องเชื่อมต่อเป็น superuser ฉันควรอนุญาต / สร้างสิทธิ์ / บทบาทใดเพื่อให้ได้ผลลัพธ์ที่ผู้ใช้ระดับสูงเห็นได้

3
ไม่อนุญาตให้ใช้คำสั่งแก้ไขฐานข้อมูลภายในธุรกรรมหลายข้อความ
ฉันได้ดาวน์โหลดตัวอย่างจากหน่วยความจำใน AdventureWorks จากที่นี่และทำตามขั้นตอนทั้งหมดที่อธิบายไว้ในเอกสารประกอบ อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้สคริปต์ใน SQL Server Management Studio ฉันได้รับข้อความแสดงข้อผิดพลาด: ไม่อนุญาตให้ใช้คำสั่งแก้ไขฐานข้อมูลภายในธุรกรรมหลายข้อความ ข้อผิดพลาดชี้ไปที่บรรทัด 9 ซึ่งก็คือ: IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX') ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] CONTAINS MEMORY_OPTIMIZED_DATA GO เนื่องจากนี่เป็นเอกสารอย่างเป็นทางการของ Microsoft (มากกว่าหรือน้อยกว่า) ฉันจึงถือว่าเป็นสิ่งที่ฉันทำผิด แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

5
มันเป็นความคิดที่ดีหรือไม่ที่จะสร้าง foreign key บนตารางใน schema ที่แตกต่างกันในฐานข้อมูลเดียวกันสำหรับแอปพลิเคชันขนาดใหญ่?
ฉันกำลังทำงานกับการถ่ายโอนแอปพลิเคชันบนเว็บขนาดใหญ่ / sql ไปยังเซิร์ฟเวอร์เฉพาะ แอปพลิเคชันนี้อยู่ในสคีมาเดียวกับ 70 แพ็คเกจของโค้ดโปรแกรม แอปพลิเคชั่นนี้สร้างขึ้นประมาณ 15 คนในเวลาที่ต่างกัน และมันก็เป็นเรื่องปกติที่เราจะต้องสร้างกุญแจต่างประเทศในตารางอ้างอิงในแบบแผนต่าง ๆ เพราะมันมีความมั่นใจและรักษาฐานข้อมูลได้ดีมากเพราะเราไม่จำเป็นต้องเก็บตารางการอ้างอิงเดียวกันไว้ในแบบแผนต่าง ๆ แต่อย่างไรก็ตาม DBA ของฉัน (ผู้ที่สร้างอินสแตนซ์ใหม่ด้วย DB และคัดลอกแอปพลิเคชันของฉันภายในโซนโซลาริส) กล่าวว่ารุนแรงมากในวันนี้ "กุญแจต่างประเทศใน schemas ที่แตกต่างกันนั้นชั่วร้ายและคุณต้องทำลายมัน!" เขาไม่ได้อธิบายมุมมองของเขา เป็นความคิดที่ดีหรือไม่ที่ทำเช่นนั้นกับแอพพลิเคชั่นขนาดใหญ่?

2
PostgreSQL เลือกฟิลด์ว่างของประเภทจำนวนเต็ม
ฉันมีตารางและฉันต้องเลือกแถวทั้งหมดที่มีค่าว่างสำหรับfk_fc_idฟิลด์ (เพื่อนำไปลบ) Column | Type | Modifiers ---------------+-----------------------------+------------------------------------------------------------ di_timestamp | timestamp without time zone | di_item_value | character varying(10) | fk_fc_id | integer | di_id | integer | not null default nextval('data_item_di_id_seq1'::regclass) อย่างไรก็ตามสิ่งนี้ไม่ทำงาน # select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id=""; ERROR: zero-length delimited identifier at or near """" LINE 1: …
13 postgresql 

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