数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
要复制的LOB数据(2135980)的长度超过配置的最大值65536
我收到复制错误“要复制的LOB数据长度(2135980)超过配置的最大65536”。 以前曾使用sp_configure将其设置为最大值(-1),并且对sys.configurations的查询确认正在使用最大值(-1)。 EXEC sp_configure 'max text repl size', -1 ; RECONFIGURE; GO select * from sys.configurations where name like 'max text repl size%'; GO 我尝试对“最大文本复制大小”使用较大的值,而不是对最大值进行设置,然后将其关闭然后再打开,都无济于事。 还有其他事情可能会覆盖“最大文本替换大小”设置,或者我可以看到的其他任何地方?

2
psql:严重:用户的对等身份验证失败
我刚刚在Ubuntu 15.10上安装了PostgreSQL 9.4。 我创建了一个用户 createuser -P myuser 我创建了一个数据库 createdb -O myuser mydatabase 我编辑pg_hba.conf并添加了local mydatabase myuser md5 我用重新启动了PostgreSQL sudo service postgresql restart 用户myuser仅是PostgresSQL用户,在Ubuntu上没有用户帐户。 当我尝试使用连接数据库psql -W mydatabase myuser时失败psql: FATAL: Peer authentication failed for user "myuser"。 PostgreSQL正在运行… ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since …

3
如何强制MySQL忽略所有索引?
我已经阅读了有关FORCE索引的文章,但是如何强制MySQL进行IGNORE ALL索引呢? 我尝试过SELECT * FROM tbl IGNORE INDEX(*),但是没有成功。 至于为什么我(和其他人)需要这样做:例如,我需要像这样通过tld总结引荐来源统计信息: SELECT count(*) as c, SUBSTRING ( domain_name, LENGTH(domain_name) - LOCATE('.', REVERSE(domain_name)) + 2 ) as tld FROM `domains_import` IGNORE INDEX(domain_name) GROUP BY tld ORDER BY c desc LIMIT 100 ...但是我始终必须查看定义了哪些索引,或者确定将通过Explain使用哪些索引。简单地编写IGNORE INDEX ALL而不关心就非常方便。 有人知道语法或技巧吗?(数十行通过MySQL定义表的行实际上不是捷径)。 从聊天讨论中添加: 贝克马克: 无索引= 148.5秒 索引= 180秒,并且仍在与发送数据一起运行SSD阵列是如此强大,以至于您几乎不需要关心数据缓存... 基准的定义: CREATE …
12 mysql  index  mysql-5.6 

2
多列vs少表-性能明智
是的,我知道数据规范化应该是我的首要任务。 我有一个表,65列存储与列车辆数据:used_vehicle,color,doors,mileage,price等等,总共65。 现在,我可以除以和有一个Vehicle表,VehicleInterior,VehicleExterior,VehicleTechnical,VehicleExtra(全一到一个与主Vehicle表)。 假设我有大约500万行(车辆)。 在SELECT带有WHERE子句的情况下:搜索效果会更好(两种情况至少都在上索引IDs): Vehicle 65列的表格或 Vehicle表与JOINS其他四个表(均具有500万行)一起返回与Vehicle?相关的所有数据 (根据数据库引擎,考虑PostgreSQL和/或MySQL)。 真的很欣赏您以前的经验中得到的任何详细见解吗?

2
Redis新手-如何在哈希中创建哈希?
我想在redis中创建这种类型的结构:(基本上是json数据) { "id": "0001", "name":"widget ABC", "model": "model123", "service":"standard", "admin_password": 82616416, "r1": { "extid":"50000", "password":"test123", }, "r2": { "ext":"30000", "password":"test123", }, } 到目前为止,我已经尝试过: 我试图创建没有“子”哈希的哈希,只是为了确保我掌握了基础知识。所以这是我从redis-cli开始的内容: HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416 HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 …
12 nosql  redis  hashing 

2
PostgreSQL-插入/更新违反外键约束
我是postgreSQL的新手。我有3个表,一个表引用了其他2个表的主键。但是我无法将数据插入Table3。参见下面的代码: DROP TABLE Table1 CASCADE; CREATE TABLE Table1( "DataID" bigint NOT NULL DEFAULT '0', "AdData" integer DEFAULT NULL, PRIMARY KEY ("DataID") ); DROP TABLE IF EXISTS Table2 CASCADE; CREATE TABLE Table2 ( "Address" numeric(20) NOT NULL DEFAULT '0', "Value" numeric(20) DEFAULT NULL, PRIMARY KEY ("Address") ); DROP TABLE IF EXISTS …

3
长时间在MSSQL中打开事务会产生什么影响?
我只是想知道如果您在数据库中开始事务并忘记提交或回滚该怎么办。服务器会停机吗?可以说您离开了3天。 还有一些正在使用它的用户,假设其他用户不知道有未完成的事务(假设用户只是在数据库中插入数据)。此操作的后果是什么?

2
快速将NULL列更改为NOT NULL
我有一个包含数百万行的表和一个允许NULL值的列。但是,当前没有任何行具有该列的NULL值(我可以通过查询很快地验证这一点)。但是当我执行命令时 ALTER TABLE MyTable ALTER COLUMN MyColumn BIGINT NOT NULL; 相对而言,查询将永远花费。实际上,它需要10到20分钟,是添加检查约束的两倍多。有没有一种方法可以立即更新该列的表元数据,特别是因为我知道该列没有行具有NULL值?

2
为什么tempdb的io_stall_writes_ms这么高?
我们将用户和系统数据文件放在同一磁盘驱动器上。用户文件的(io_stall_write_ms /(1.0 + num_of_writes))低于2,但是tempdb文件通常超过400。而不是常规的数据库数据文件。 SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs.[file_id] = mf.[file_id] 谢谢,


4
网络备份的替代方法
在我们的环境中,有些服务器位于“始终在线”可用性组中,有些则是独立的。 我们通常备份到网络共享,但是最近我们观察到,随着数据库的增大,花费的时间越来越长,这会使整个网络变慢。 Ola hallengren的脚本被用于压缩,并且还分割备份文件。我仅执行每日“完整”备份。备份将转到网络共享EMC isilon驱动器。 我从不满意EMC DD Boost。唯一的选择是执行本地备份,然后复制到相同的网络共享。 除了上述以外,还有其他有效的方法吗?

1
什么是SQL的“难提词”?
什么是SQL的“无提词”? 我正在阅读sys.query_store_query_text(Transact-SQL),看到了以下内容,因此我在Google {SQL“ unmentionable”一词}上进行了搜索 has_restricted_text 位 查询文本包含密码或其他不易提及的单词。 其他3个链接将我带回到找到它的位置,我找不到任何看起来与密码相关的内容或SQL可能关心的任何内容。


1
如何在组织中“自我审核”所有SQL Server许可证?
因此,我已经开始了一个不错的非营利组织的新工作,该组织已经存在了几十年。它们具有各种SQL Server版本和版本(例如:2005 Express到2016 SP2 Enterprise)以及许多Windows VM(版本从2003到2016)。 以前的DBA并未完成有关公司拥有的许可证数量或版本的任何文档。实际上没有有用的记录。 我已经运行MAP工具包来收集有关SQL Server的详细信息。因此,至少我有一个关于什么服务器存在的起点,并且已经挖掘了哪些服务器仍在提供生产数据。 我还使用了新的ApexSQL Discover工具,结果却好坏参半(对不起,我喜欢您的东西,但是当我需要添加1台服务器时,我迫不及待需要3天的时间才能运行该工具)。还有dbatools find-dbainstance(不是使用PS导出大量数据的忠实拥护者)。因此,通过将所有这些放在一起,我现在可以确定地发现了该域上存在的大多数或所有实例。 当然,我已经以多种方式查询了许可,并彻底检查了完全无用的极其有用的MS SQL许可指南,该指南似乎没有提供有关组织拥有的许可证或如何获得许可证的任何信息。 问题的症结:其中一些许可证是十年(或两年)前购买的。有些肯定是纸质发票。还记得我提到这是非营利组织吗?从好的方面来说,许可很便宜。另一方面,许可价格便宜,因此大多数或所有许可都没有SA,因为购买新许可更便宜。编辑:这是当时不购买SA的理由,我没有参与。 我是否应该仅假设由于极有可能没有SA-服务器也可能已获得适当的许可-并根据需要购买新服务器?这似乎是一种可怕的方法。 我的问题: 在不尝试挖掘2004年以来的纸质发票的情况下,我怎么知道我的新公司所拥有的SQL Server许可证是什么?我以前从未遇到过这种情况。我是接受审核或支付合作伙伴审核费用的唯一选择吗?(如果是这样,微软,你在做什么???)。 dba.se可以在此处提供的任何见解都可能会增加我的生活。谢谢大家!

1
ALTER TABLE…DROP COLUMN真的是仅元数据操作吗?
我发现了一些表明ALTER TABLE ... DROP COLUMN是仅用于元数据的操作的源。 资源 怎么会这样?是否不需要从基础非聚集索引和聚集索引/堆中清除DROP COLUMN期间的数据? 此外,为什么Microsoft Docs暗示它是完全记录的操作? 对表所做的修改将被记录并且可以完全恢复。影响大表中所有行的更改(例如删除列或在某些版本的SQL Server上添加具有默认值的NOT NULL列)可能需要很长时间才能完成并生成许多日志记录。与影响许多行的任何INSERT,UPDATE或DELETE语句一样小心地运行这些ALTER TABLE语句。 作为第二个问题:如果未从基础页面中删除数据,引擎将如何跟踪丢失的列?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.