数据库管理员

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

2
错误1114(HY000)表…已满,并且innodb_file_per_table设置为自动扩展
我有一个MySQL数据库,可容纳大量数据(100-200GB-一堆科学测量值)。绝大多数数据存储在一张表中Sample。现在,我正在创建数据库的从属副本,我想innodb_file_per_table在此过程中充分利用的优势。因此,我设置innodb_file_per_table了从属配置,并导入了数据库的转储。令我惊讶的是,它失败了 第5602行的错误1114(HY000):表“样本”已满 该文件Sample.ibd当前约为93GB,分区上有600GB以上的可用空间,因此这不是磁盘可用空间问题。它似乎都没有达到任何类型的文件系统限制(我正在使用ext4)。 如果有任何想法,我将不胜感激,或者可能要调查什么。 更新:我正在使用mysql Ver 14.14 Distrib 5.1.66, for debian-linux-gnu (x86_64)。 SELECT @@datadir; -- returns `/home/var/lib/mysql/` SHOW VARIABLES LIKE '%innodb_data_file_path%'; -- ibdata1:10M:autoextend df -h /home/var/lib/mysql/ 768G 31G 699G 5% /home

2
如何分析存储过程
我正在使用SQL Server 2012,并且想知道如何配置存储过程 例如,探查器可以捕获存储过程中的每个单独的SQL语句,它是什么以及运行需要多长时间等? 我正在尝试诊断合并复制存储过程,并且必须在合并代理的完整运行中捕获这一点。似乎不可能抓住存在性能问题的存储过程并再次运行它,因为这并不慢。

6
删除大量行后,SQL Server数据库大小没有减少。
此问题已从超级用户迁移,因为可以在数据库管理员堆栈交换中回答。 迁移 7年前。 我的SQL不好,但是我需要维护一个数据库。 几乎没有剩余空间了,所以我决定删除2008年的所有数据。在执行delete查询(已清理了大约10000000行)并清理了事务日志后,我发现操作对数据库大小没有影响。我还有什么需要做的吗?

2
如何查找导致tempdb增长的SQL语句?
服务器(SQL Server 2008)的tempdb每月增加几次,达到500GB +。是否有可能找出导致该问题的SQL语句?这个问题通常不是由造成create table #temp...; insert into #temp...或select ... into #temp...而又复杂的连接。 某些tempdb文件的Initial Size每次也会自动设置为更大的值。怎么预防呢? 有时,缓存的计划会阻止调整大小/缩小文件。如何找到哪个持有tempdb?

2
在多租户数据库体系结构中处理越来越多的租户
对于每个租户的应用程序实例,在具有单独数据库的公共服务器中处理少量客户(租户)相对简单,通常是正确的方法。目前,我正在研究每个租户都有自己的数据库实例的应用程序的体系结构。 但是,问题在于此应用程序将具有大量的租户(5,000-10,000),并且用户数量很多,单个租户可能为2,000。我们将需要支持每周由几个租户扩展该系统。 此外,将为所有租户及其用户提供一个通用的登录过程(即每个租户不能拥有自己的URL)。为此,我需要一个集中的登录过程以及一种将数据库动态添加到系统并注册用户的方法。 如何可靠地自动化注册和数据库创建过程? 是在系统上创建和注册租户数据库的过程可能会导致性能或锁定问题吗?如果您认为这可能是一个问题,那么有人可以建议减轻它的方法吗? 如何以一种将用户凭据与特定租户的数据库关联但用户可以通过公共页面登录(即全部通过相同的登录URL,但他们的家庭应用程序将位于某个特定租户的数据库中)的方式管理集中身份验证)。租户必须能够维护自己的登录名和权限,但是中央登录系统必须知道这些。有人可以建议一种方法吗? 如果我需要通过添加多个数据库服务器来“横向扩展”,那么有人可以建议我管理跨服务器的用户身份(模拟等)时可能要处理的问题以及减轻这些问题的某种方法吗?

3
什么是“混沌”隔离级别?何时使用?
ADO.NET文档显示了将SQL事务的事务级别设置为Chaos的可能性。听起来不愉快,但是如果该功能存在,那么大概可以合理使用。 BOL中的SET TRANSACTION ISOLATION LEVEL命令(啊!看,我可以使用google和BOL)似乎什么都没有命名为“ chaos”,并且ADO.NET确实有5种模式,除了“ chaos”之外,它们还与已记录的级别很好地匹配 这个混沌水平是做什么的?(为什么它的名称不友好?) 参考: ADO.NET枚举

3
是否可以同时还原sql-server bak和缩小日志?
我们有一个来自客户的bak文件,我们已将其转移到我们的开发人员办公室以进行问题调查。当前备份为25GB,还原的数据库大小大致相同,但是需要还原100GB。我相信这是因为那里的数据库设置为具有75GB的事务日志大小。还原数据库后,我们可以收缩日志文件,但是在还原中有没有办法做到这一点?

6
如何有效地检查多个列上的EXISTS?
这是我定期遇到的一个问题,尚未找到一个好的解决方案。 假设下面的表结构 CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) 要求是确定可为空的列中的任何一个B或C实际上是否包含任何NULL值(以及是否包含任何值)。 还要假设该表包含数百万行(并且没有可用的列统计信息,因为我对此类查询的更通用解决方案感兴趣)。 我可以想到几种解决方法,但都有缺点。 两个单独的EXISTS语句。这样的好处是,一旦NULL找到a,查询就可以立即停止扫描。但是,如果两列实际上都不包含,NULL则将进行两次完整扫描。 单一汇总查询 SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) AS C FROM T 这可能会同时处理两个列,因此最糟糕的情况是一次完整扫描。缺点是,即使NULL在查询的两个很早就在两列中都遇到了a …

2
如何知道何时/是否索引过多?
时不时地运行Microsoft SQL Server Profiler,它建议我创建一系列新的索引和统计信息(“ ... 97%的预期改进...”)。 据我了解,每个增加的索引都可以使SQL SELECT查询更快,但由于必须调整索引,因此SQL UPDATE或SQL 查询的速度也会INSERT变慢。 我想知道的是,什么时候会有“太多”的索引/统计信息? 也许对此没有明确的答案,但有一些经验法则。

2
如何将IS-A关系映射到数据库?
考虑以下: entity User { autoincrement uid; string(20) name; int privilegeLevel; } entity DirectLoginUser { inherits User; string(20) username; string(16) passwordHash; } entity OpenIdUser { inherits User; //Whatever attributes OpenID needs... I don't know; this is hypothetical } 不同类型的用户(直接登录用户和OpenID用户)显示IS-A关系。即,两种类型的用户都是用户。现在,有几种方法可以在RDBMS中表示: 方式一 CREATE TABLE Users ( uid INTEGER AUTO_INCREMENT NOT NULL, name VARCHAR(20) …

7
有任何开源/免费ETL吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 甚至在Pentaho购买并将其命名之前,我都在使用Pentaho Data Integration。我有最后一个免费版本。 我最近访问了他们的网站,看看他们是否发布了另一个版本,只是发现我最喜欢的开源etl不再是很大的开放,而且还不是很免费。 你们中有人知道价格合理且易于使用的ETL工具中的替代方法吗?
26 etl 

7
长列如何影响性能和磁盘使用率?
在我们当前的项目中,它经常发生,我们需要将列扩展几个字符。从varchar(20)到varchar(30)等等。 实际上,这到底有多重要?优化效果如何?正常的“输入”字段只允许100或200甚至500个字符的影响是什么?一封电子邮件只能包含320个字符,所以好吧-那里有一个很好的限制。但是,如果将其设置为200,我会得到什么,因为我希望电子邮件地址不会超过此数目。 通常,我们的表的行数不超过100.000,最多不超过20或30列。 我们现在使用SQL Server 2008,但是了解不同的DB如何处理此问题将很有趣。 如果影响非常小-就像我期望的那样,这将有助于获得一些好的论据(通过链接进行备份?)来说服我的DBA,这种长距离偏执并不是真正必要的。 如果是这样,我在这里学习:-)

1
索引:如果节点数相同,则整数vs字符串性能
我正在使用PostgreSQL(9.4)数据库在Ruby on Rails中开发应用程序。在我的用例中,表中的列将被非常频繁地查找,因为应用程序的重点是在模型上搜索非常特定的属性。 我目前正在决定是使用一种integer类型还是只使用典型的字符串类型(例如character varying(255),Rails中的默认字符串类型)作为列,因为我不确定索引的性能会有什么不同。 这些列是枚举。对于具有的可能值的数量,它们具有固定的大小。大多数枚举长度不超过5,这意味着该索引在应用程序的整个生命周期中或多或少是固定的;因此,整数和字符串索引的节点数将相同。 但是,将被索引的字符串可能长约20个字符,这在内存中大约是整数的5倍(如果整数是4个字节,并且字符串是每个字符1个字节的纯ASCII,则成立)。我不知道数据库引擎怎么做索引查找窗口,但如果它需要“扫描”的字符,直到它匹配准确,那么在本质上这意味着该字符串查找就超过5倍的整数查找速度较慢; 直到匹配整数查找为止的“扫描”将是4个字节而不是20个字节。这就是我的想象: 查找值为(整数)4: 正在扫描.........................找到| 正在获取记录... | BYTE_1 | BYTE_2 | BYTE_3 | BYTE_4 | BYTE_5 | BYTE_6 | BYTE_7 | BYTE_8 | ... | 查找值是(字符串)“ some_val”(8个字节): 扫描................................................. ....................................发现| 正在获取记录... | BYTE_1 | BYTE_2 | BYTE_3 | BYTE_4 | BYTE_5 | BYTE_6 | BYTE_7 | …

2
mysql锁定等待超时超出;尝试重新启动事务
我们正在运行java应用程序,运行了很长时间,后端是db,是MySQL,最近更新到mysql 5.6。一切运行良好,过去一周开始出现此错误,超过了锁定等待超时;尝试重启似乎永不停止的事务,不知道如何处理此错误才能停止。为什么它突然发生
26 mysql  mysql-5.6 

5
归档旧数据
由于数据库太大,我们当前遇到一些性能问题。有过去10年存储的数据,我看不出为什么必须将2年以上的数据与新数据存储在同一表中的原因。 现在,由于我在管理数据库方面没有很丰富的经验,因此我正在寻找归档旧数据的最佳方法。 信息 数据库中总共有约310'000'000条记录。 数据库在硬盘上需要250 GB。 服务器版本为具有兼容级别SQL Server 2005(90)的SQL Server 2008,但我们计划很快升级到SQL Server 2012 我考虑过两种可能性: 新资料库 在生产服务器上创建一个与之相似的数据库,并将所有旧数据插入新数据库中。 缺点:由于我们的环境中不允许使用链接服务器,因此如果需要,将很难加入旧数据 历史架构 使用与生产数据库相同的表创建新的模式fe [hist]。在新架构的这些新表中插入所有旧数据。 优势:易于加入,如果将来需要旧数据 您是否更喜欢其中一种解决方案? 为什么? 还有更好的可能性吗? 是否有现有工具可轻松实现此任务? 还有其他想法吗? 提前致谢 编辑 附加问题: 新创建的存档表是否还需要主键/外键? 还是应该只包含列但没有键/约束?

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.