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

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

4
ทำไมประเภทข้อมูล varchar อนุญาตให้ใช้ค่า unicode
ฉันมีตารางที่มีคอลัมน์ varchar มันช่วยให้ Trademark (ลิขสิทธิ์), ลิขสิทธิ์ (©) และตัวอักษร Unicode อื่น ๆ ที่แสดงด้านล่าง Create table VarcharUnicodeCheck ( col1 varchar(100) ) insert into VarcharUnicodeCheck (col1) values ('MyCompany') insert into VarcharUnicodeCheck (col1) values ('MyCompany™') insert into VarcharUnicodeCheck (col1) values ('MyCompany░') insert into VarcharUnicodeCheck (col1) values ('MyCompanyï') insert into VarcharUnicodeCheck (col1) values ('MyCompany') select …

2
Postgres ฟัง / แจ้งเตือนเป็นคิวข้อความ
มีวิธีใช้ฟีเจอร์ Postgres Listen / Notify เพื่อส่งข้อความไปยังช่องและมีผู้ฟังเพียงคนเดียวที่ใช้ข้อความนี้หรือไม่? จุดประสงค์นี้คือฉันมีแอพ 'คนงาน' หลายคนที่ฟังช่อง Postgres เดียวกันทั้งหมด แต่ฉันต้องการให้งานทำเพียงครั้งเดียวต่อข้อความที่ได้รับผ่านช่องทางแจ้งเตือน หาก Listen / Notify ไม่ใช่คุณสมบัติที่ถูกต้องใน Postgres ฉันควรใช้คุณสมบัติแยกต่างหากหรือไม่? โดยหลักการแล้วฉันต้องการทำสิ่งนี้โดยไม่ใช้ส่วนขยายเพิ่มเติมใด ๆ

2
ค่าใช้จ่ายในการอัปเดตคอลัมน์ทั้งหมดคืออะไรแม้แต่คนที่ไม่ได้เปลี่ยนแปลง [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา เมื่อพูดถึงการอัพเดตแถวเครื่องมือ ORM จำนวนมากออกคำสั่ง UPDATE ที่ตั้งค่าทุกคอลัมน์ที่เกี่ยวข้องกับเอนทิตีนั้น ข้อดีคือคุณสามารถแบทช์ข้อความสั่งการอัพเดทได้อย่างง่ายดายเนื่องจากUPDATEข้อความนั้นเหมือนกันไม่ว่าคุณจะเปลี่ยนเอนทิตีแอตทริบิวต์ใด ยิ่งไปกว่านั้นคุณยังสามารถใช้การแคชคำสั่งฝั่งเซิร์ฟเวอร์และไคลเอนต์ได้เช่นกัน ดังนั้นถ้าฉันโหลดเอนทิตีและตั้งค่าคุณสมบัติเดียวเท่านั้น: Post post = entityManager.find(Post.class, 1L); post.setScore(12); คอลัมน์ทั้งหมดจะมีการเปลี่ยนแปลง: UPDATE post SET score = 12, title = 'High-Performance Java Persistence' WHERE id = 1 ทีนี้สมมติว่าเรามีดัชนีในtitleคุณสมบัติเช่นกันฐานข้อมูลไม่ควรตระหนักว่ามูลค่าไม่เปลี่ยนแปลง ในบทความนี้ Markus Winand พูดว่า: การอัปเดตในคอลัมน์ทั้งหมดแสดงรูปแบบเดียวกับที่เราสังเกตเห็นแล้วในส่วนก่อนหน้า: เวลาตอบสนองจะเพิ่มขึ้นพร้อมกับดัชนีเพิ่มเติมแต่ละรายการ ฉันสงสัยว่าทำไมโอเวอร์เฮดนี้เนื่องจากฐานข้อมูลโหลดหน้าข้อมูลที่เกี่ยวข้องจากดิสก์ไปยังหน่วยความจำและเพื่อให้สามารถทราบได้ว่าค่าคอลัมน์จำเป็นต้องเปลี่ยนหรือไม่ แม้สำหรับดัชนีก็ไม่ต้องปรับสมดุลอะไรเลยเนื่องจากค่าดัชนีไม่เปลี่ยนแปลงสำหรับคอลัมน์ที่ไม่ได้เปลี่ยนแปลง แต่รวมอยู่ในการอัพเดท เป็นดัชนี B + …

4
จดหมาย DB SQL Server 2016 ไม่ได้ส่ง
ฉันใช้ SQL Server 2016 และมีการระเบิด ... จดหมาย DB ของฉันไม่ได้ส่งและฉันกำลังจะหมด ฉันตรวจสอบสิทธิ์บัญชี SQL สองครั้งเพื่อให้สามารถเรียกทำงานได้ DBmail - มันได้อ่านและดำเนินการแล้ว ฉันป้อนกฎสำหรับพอร์ตขาออกของไฟร์วอลล์ 587 ฉันลองใช้บัญชีอีเมลและโปรไฟล์อื่นด้วยปัญหาที่ยังไม่ได้ส่ง รายการเฉพาะในบันทึก (บันทึกเมล db) กำลังเริ่มต้นและสิ้นสุดการให้บริการ ไม่มีข้อผิดพลาดทุกที่ที่ฉันสามารถหาได้ อีเมลดูเหมือนจะป้อนคิวการส่งและจะไม่ทิ้ง บัญชีสามารถส่งและรับอีเมลด้วยตนเองและจากอินสแตนซ์ของ SQL Server 2014 บนเครื่องอื่น ฉันได้รับรายการที่มีสถานะ "ไม่ส่ง" และตรวจสอบสถานที่ปกติทั้งหมดพร้อมผลลัพธ์ที่คาดหวังในรายการทั้งหมดนอกเหนือจากจดหมายที่ไม่ได้ส่งคิวที่ยาว: SELECT * FROM msdb..sysmail_event_log order by log_id DESC SELECT * FROM dbo.sysmail_mailitems SELECT * FROM dbo.sysmail_sentitems USE msdb …

3
การแบ่งหน้าใน SQL Server
ฉันมีฐานข้อมูลขนาดใหญ่มากประมาณ 100 GB ฉันกำลังดำเนินการค้นหา: select * from <table_name>; และฉันต้องการแสดงแถวที่ 100 ถึง 200 เท่านั้น ฉันต้องการที่จะเข้าใจว่าสิ่งนี้เกิดขึ้นภายในได้อย่างไร ฐานข้อมูลดึงข้อมูลระเบียนทั้งหมดจากดิสก์ไปยังหน่วยความจำและส่งกลับแถวที่ 100 ถึง 400 ไปยังไคลเอนต์ที่ทำแบบสอบถามหรือไม่ หรือมีกลไกใดบ้างดังนั้นเฉพาะเรคคอร์ดเหล่านั้น (100 - 200) ที่ดึงมาจากฐานข้อมูล - โดยใช้กลไกการจัดทำดัชนีเช่น B-trees เป็นต้น? ฉันพบว่าสิ่งนี้เกี่ยวข้องกับแนวคิดเรื่องการแบ่งหน้า แต่ฉันไม่สามารถหาได้ว่ามันเกิดขึ้นภายในระดับฐานข้อมูลได้อย่างไร

3
ฉันจะวางทริกเกอร์ทั้งหมดในฐานข้อมูลเดียวได้อย่างไร
ฉันมีฐานข้อมูล 104 ทริกเกอร์มีวิธีลบทริกเกอร์ทั้งหมดด้วยคำสั่งเดียวจากฐานข้อมูลเดียวที่เรียกว่า 'system_db_audits หรือไม่

3
ข้อความแสดงข้อผิดพลาด - สิทธิ์การดูสถานะเซิร์ฟเวอร์ถูกปฏิเสธ - เมื่อเชื่อมต่อกับ SQL Server 2014 โดยใช้ SQL Server 2012 Management Studio
เมื่อคลิกขวาบนโต๊ะและเลือก "select top 1000 rows" ฉันได้รับข้อผิดพลาดนี้: มีวิธีแก้ปัญหาอื่นนอกเหนือจากการอัพเกรดเป็น SQL Server 2014 อย่างชัดเจนหรือไม่?

2
การแทนค่าภายในของ SQL Server UniqueIdentifier / GUID
เพื่อนร่วมงานของฉันส่งคำถามที่น่าสนใจมาให้ฉันซึ่งฉันไม่สามารถอธิบายได้ทั้งหมด เขารันโค้ดบางส่วน (รวมอยู่ด้านล่าง) และได้ผลลัพธ์ที่ไม่คาดคิดมาบ้าง เป็นหลักเมื่อแปลงUniqueIdentifier(ซึ่งฉันจะอ้างถึงGuidจากที่นี่จาก) เป็นประเภทbinary(หรือvarbinary) ลำดับของครึ่งแรกของผลลัพธ์จะย้อนกลับ แต่ครึ่งหลังไม่ใช่ ความคิดแรกของฉันคือการ endianness ของระบบเป็นสาเหตุและที่Guidแสดงถูกเก็บรักษาไว้ แต่binaryแบบฟอร์มไม่รับประกัน เห็นได้ชัดว่านี่เป็นรายละเอียดการใช้งาน แต่ฉันสงสัยว่ามีคำอธิบายที่ดีหรือไม่ รหัส: declare @guid uniqueidentifier = '8A737954-CBEC-40CE-A534-2AFFB5A0E207'; declare @binary binary(16) = (select convert(binary(16), @guid)); select @guid as [GUID], @binary as [Binary]; ผล: GUID Binary 8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207 อย่างที่คุณเห็นครึ่งแรกของGuid(ตลอดทาง40CE) จะถูกเก็บไว้ด้านหลังสำหรับแต่ละส่วน นั่นคือส่วนแรกของGuidย้อนหลังจากนั้นส่วนที่สองจากนั้นส่วนที่สาม แต่ลำดับของส่วนจะถูกเก็บรักษาไว้ Guidหลังจากนั้นสองคนสุดท้ายส่วนจะถูกเก็บไว้ในลำดับที่แน่นอนที่พวกเขาปรากฏใน มีใครอธิบายเรื่องนี้ได้บ้าง (ชุดทดสอบที่มีขนาดใหญ่กว่านั้นรวมอยู่ด้านล่าง) รหัส: declare @guid_to_binary table …

1
วิธีที่ดีที่สุดในการเขียน SQL Query ที่ตรวจสอบคอลัมน์สำหรับค่าที่ไม่เป็น NULL หรือ NULL
ฉันมี SP พร้อมพารามิเตอร์ที่มีค่า NULL เป็นค่าเริ่มต้นจากนั้นฉันต้องการสอบถามเช่นนี้ SELECT ... FROM ... WHERE a.Blah = @Blah AND (a.VersionId = @VersionId OR (@VersionId IS NULL AND a.VersionId IS NULL)); WHEREตรวจสอบข้างต้นสำหรับทั้งค่าที่ไม่เป็นโมฆะและค่า NULL @VersionIdสำหรับ มันจะดีกว่าในแง่ของประสิทธิภาพแทนที่จะใช้IFคำสั่งและทำซ้ำแบบสอบถามเป็นที่ค้นหา non-NULL และอื่นสำหรับ NULL เช่นนั้น : IF @VersionId IS NULL BEGIN SELECT ... FROM ... WHERE a.Blah = @Blah AND a.VersionId IS …


1
กลยุทธ์การสืบค้นโดยใช้ตารางเวลาชั่วคราวของระบบ SQL Server 2016 สำหรับมิติที่เปลี่ยนแปลงช้า
เมื่อใช้ตารางชั่วคราวของระบบ (ใหม่ใน SQL Server 2016) การเขียนแบบสอบถามและความหมายของประสิทธิภาพเมื่อใช้คุณลักษณะนี้เพื่อจัดการมิติการเปลี่ยนแปลงอย่างช้า ๆ ในคลังข้อมูลเชิงสัมพันธ์ขนาดใหญ่ ตัวอย่างเช่นสมมติว่าฉันมีCustomerมิติ100,000 แถวพร้อมPostal Codeคอลัมน์และSalesตารางข้อเท็จจริงหลายพันล้านแถวพร้อมCustomerIDคอลัมน์คีย์ต่างประเทศ และสมมติว่าฉันต้องการสอบถาม "ยอดขายรวม 2014 ตามรหัสไปรษณีย์ของลูกค้า" DDL แบบง่ายเป็นเช่นนี้ (มีหลายคอลัมน์เพื่อความชัดเจน): CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW …

1
สิ่งที่ จำกัด จำนวนการเชื่อมต่อ?
ตามhttps://devcenter.heroku.com/articles/heroku-postgres-legacy-plansขีด จำกัด การเชื่อมต่อคือ 500 ตามhttps://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server "โดยทั่วไป PostgreSQL บนฮาร์ดแวร์ที่ดีสามารถรองรับการเชื่อมต่อได้สองสามร้อย" อะไรคือปัจจัยที่กำหนดในข้อ จำกัด นี้ #CPU แกน แกะ? OS?

1
ทำไมไม่สร้างดัชนีใหม่ด้วยจำนวนหน้า <1,000
ฉันใช้สคริปต์ Ola Hallengrens สำหรับการบำรุงรักษาดัชนี ก่อนที่ฉันจะทำอย่างนั้นฉันใช้แบบสอบถามต่อไปนี้เพื่อดูว่าดัชนีใดที่มีการแยกส่วนมากที่สุด: SELECT dbschemas.[name] as 'Schema', dbtables.[name] as 'Table', dbindexes.[name] as 'Index', indexstats.avg_fragmentation_in_percent, indexstats.page_count FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id] INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id] INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = …

1
MySQL open_files_limit - ไม่สามารถเปลี่ยนตัวแปรนี้ได้
ฉันทำงานเป็นปัญหาเพราะฉันopen_files_limitMySQL 1024สำหรับเป็นเพียง Centos 7, MySQL Community Server 5.6.22-log จริงๆแล้วมันเป็น vps ที่อุทิศให้กับ mysql สำหรับเซิร์ฟเวอร์ WHM (mysql ระยะไกล) แต่นั่นควรอยู่ด้านข้าง กำหนดค่าไฟล์ my.cnf: [mysqld] open_files_limit = 100000 open-files-limit = 100000 #I've read that the dashes are required on older versions, but I threw it in anyway. innodb_buffer_pool_size = 600M ... # and the same …
17 mysql 

3
ตรวจสอบความคืบหน้าของการแก้ไขการจัดระเบียบดัชนีใหม่ / สร้างใหม่
ฉันจะตรวจสอบความคืบหน้า / สถานะได้อย่างไรเมื่อฉันส่งการเปลี่ยนแปลงดัชนีการจัดระเบียบใหม่ / สร้างใหม่?

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