数据库管理员

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

2
MariaDB Java客户端在多大程度上可以完美替代MySQL JDBC(Connector / J)?
前提:我提供了一个Java应用程序,该应用程序将与MySQL数据库建立JDBC连接。(在撰写本文时,它可能是5.1或5.5,但希望问题和答案不会严重依赖该版本。) 观察:显然,我可以使用MySQL JDBC驱动程序(Connector / J)或MariaDB JDBC驱动程序(MariaDB Java Client)建立与MySQL服务器的连接。从ISV的角度来看,一个巨大的好处是MariaDB驱动程序是LGPL许可的,而MySQL驱动程序是GPL的许可的。MariaDB驱动程序的性能似乎非常好。 问题:MariaDB JDBC驱动程序在多大程度上可以完美替代MySQL JDBC驱动程序? 我不是要就两者的相对优点进行辩论。但是,我希望有人可以按照以下其中一种方式回答: MariaDB JDBC驱动程序在X和Y方面存在重要问题,因此,如果使用其中任何一个,都会遇到麻烦。 根据一些文章或规范,代码或其他证据,MariaDB JDBC驱动程序完全实现[至少] MySQL驱动程序中可用的所有方法。你会没事的。
11 mysql  mariadb  jdbc 

3
通过SQL Server 2012 OLAP多维数据集支持网站是否合理?
我的任务是为大型零售连锁店设计解决方案。他们希望允许其120万客户中的每一个都登录到网站上,以查看大约50个类别中最近购买的商品分布(当月,上个月,年初至今)。数据每天更新一次。 我正在考虑建立基于SQL Server 2012的OLAP多维数据集,并让网站直接利用主动缓存等功能来查询此多维数据集。但是,作为一名开发人员,我几乎没有SQL Server分析服务部分的经验,因此非常关注此解决方案的性能。 将网站直接连接到OLAP多维数据集听起来是否可行?这样的系统是否像SQL Server那样对来自多个用户的负载做出反应,使其成为一个合理的解决方案,还是它们的行为完全不同? 我不希望用户经常检查其状态,我当然会在Web服务器上使用缓存等。

1
具有LOG_BACKUP log_reuse_wait_desc的SQL Server 2012简单恢复模型
虽然我在做我自己的调查,没有人知道为什么在数据库SIMPLE恢复模型LOG_BACKUP的log_reuse_wait_desc? SQL Server 2012 SP1。数据库是在几周前创建的。没有复制,没有镜像,没有日志传送,而且从未有过这些。 我们做了备份数据库,并恢复到另一个实例,它显示了SIMPLE和NOTHING在log_reuse_wait对其他实例。但是我不认为还原到另一个实例是重现此问题的好方法,因为还原操作会前滚/回滚事务。

4
如何编写加总一列以创建离散存储桶的窗口查询?
我有一个表,其中包含一列十进制值,例如: id value size -- ----- ---- 1 100 .02 2 99 .38 3 98 .13 4 97 .35 5 96 .15 6 95 .57 7 94 .25 8 93 .15 我需要完成的工作有点难以描述,因此请耐心等待。我正在尝试做的是创建size列的聚合值,每当前一行的总和为1时(根据降序排列),该列的值就会递增1 value。结果看起来像这样: id value size bucket -- ----- ---- ------ 1 100 .02 1 2 99 .38 1 3 …

2
如何减少行估计以减少溢出到tempdb的机会
我注意到,当tempdb事件大量溢出(导致查询缓慢)时,对于特定的联接,行估计常常会偏离。我已经看到溢出事件是通过合并和哈希联接发生的,它们通常会将运行时间增加3倍至10倍。这个问题涉及如何在减少溢漏事件机会的假设下改进行估计。 实际行数40k。 对于此查询,计划显示错误的行估计(11.3行): select Value from Oav.ValueArray where ObjectId = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and ObjectId = 3540233 and Sequence = 2) and PropertyId = 2840 option (recompile); 对于此查询,该计划显示了良好的行估计(56k行): declare @a bigint = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and …

2
如果我对一个数据库进行故障转移,那么共享相同镜像端点的其他数据库是否也会进行故障转移?
我们有两个用于在单个SQL Server实例上进行镜像的数据库设置:测试数据库和生产数据库。两者都使用完全相同的端点镜像到另一台服务器。 如果我进入测试数据库的“数据库属性”并单击“故障转移”按钮,由于两个数据库共享一个镜像端点,并且它们的“服务器网络地址”属性相同,它也会对生产数据库进行故障转移吗? 我很担心,因为当我为第二个数据库设置镜像时,我不必配置任何新内容。它只是使用了所有现有信息。 如果我使用“数据库属性”中的“故障转移”按钮,会导致对使用该端点的所有数据库进行故障转移,还是仅对我正在查看其属性的特定数据库进行故障转移?

3
获取定界字符串中值的第二次或第三次出现
我有下表: ========================================================== | Name_Level_Class_Section | Phone Num | ========================================================== | Jacky_1_B2_23 | 1122554455 | | Johnhy_1_B2_24 | 1122554455 | | Peter_2_A5_3 | 1122554455 | ========================================================== 我正在考虑简化我的SQL语句,如下所示: select *, substring(Name_Level_Class_Section, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_', Name_Level_Class_Section) + 1)) + 1, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))+1))- CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))) as CLA from Bookings order by CLA asc, Name_Level_Class_Section …

1
我如何请求刷新Postgresql事务日志?
我遇到以下问题:PostgreSQL 9.2附带了一个“垂直” Linux发行版(Sophos UMT),用于存储其配置。不幸的是,自上次更新以来,某些实例的事务日志(WAL)似乎一直在增长,而从未被刷新过。这导致pg_xlog文件夹长到比基本文件夹大几个数量级。 我现在处在一个微妙的情况:由于WAL文件的过度增长,其中一台计算机(VM)的磁盘将在星期一之前装满。我已经向供应商提出了支持案例,但是到目前为止,他们的帮助不是很大(他们建议我们使用更大的磁盘来重建VM)。 永远不会备份该数据库,因为该软件以不同的方式执行备份(它具有自己的备份过程并通过电子邮件发送备份文件),我想这就是WAF增长如此之多的原因。 恐怕我还远不是PostgreSQL专家,所以很可能我在问一个愚蠢或显而易见的问题,但是,请求刷新WAL文件的程序是什么? 理想情况下,我正在寻找一种程序,该程序将允许我在有问题的系统上刷新这些WAL文件,以便为自己购买足够的时间以使供应商发布更好的修复程序。 编辑:根据要求,这是SELECT version();查询的输出: PostgreSQL 9.2.4 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 32-bit (1列) 和SELECT name, current_setting(name), source FROM pg_settings WHERE source NOT IN ('default', 'override');查询 hot_standby | on | configuration file listen_addresses | * | configuration file log_destination …
11 postgresql 

5
SQL Server中的最大内存设置
我在单个专用服务器上运行SQL Server 2008和基于Web的应用程序,仅提供2Gb内存。 如其他地方所述,SQL Server通常会占用高达98%的物理内存,这似乎减慢了服务器上运行的Web应用程序的速度。 在SSMS的服务器属性中的“内存”下,“最大服务器内存”(以Mb为单位)设置为:2147483647 我的问题是,考虑到我拥有的可用内存量,并且同一台服务器也正在运行Web应用程序,建议在最大服务器内存框中放入的建议数量是多少? 此外,在SQL Server运行时更改此数字是否安全? 感谢您的意见。

3
自动十进制舍入问题
这个问题相对简单。我需要计算3列,中间结果是很大的小数,并且SQL Server早就遇到了一个问题,即无论是否进行任何类型的转换,SQL Server基本上都会舍入小数。 例如,让我们做一个简单的除法1234/1233。计算器将产生1,00081103000811。但是,当我在SQL Server上执行此操作时,我们得到以下信息: -- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37)) -- Result: rounded at 1.000811 SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233) -- Correct result at 1,00081103000811 -- But this requires the zeroes to be put in manually …

1
Postgres:count(*)vs count(id)
我在文档中看到了count(*)和之间的区别count(pk)。我一直在使用count(pk)(这里pk是SERIAL PRIMARY KEY)不知道约的存在count(*)。 我的问题是关于Postgres的内部优化。是否足够聪明地知道SERIAL PRIMARY KEY每行中都会存在一个a ,并且永远不会为假,仅对行进行计数?还是会对每行进行多余的谓词检查?我同意这可能是毫无意义的优化,但我很好奇。 我看了看输出EXPLAIN和EXPLAIN VERBOSE为count(*),count(id)并count(id > 50)看看是否EXPLAIN提到检查其输出的断言。没有。

2
查找最长前缀的算法
我有两张桌子。 第一个是带有前缀的表 code name price 343 ek1 10 3435 nt 4 3432 ek2 2 其次是带有电话号码的通话记录 number time 834353212 10 834321242 20 834312345 30 我需要编写一个脚本,该脚本从每个记录的前缀中找到最长的前缀,并将所有这些数据写入第三张表,如下所示: number code .... 834353212 3435 834321242 3432 834312345 343 对于数字834353212,我们必须修剪“ 8”,然后从前缀表3435中找到最长的代码。 我们必须始终删除第一个“ 8”,并且前缀必须在开头。 我很久以前用非常糟糕的方式解决了这个任务。这是可怕的perl脚本,它对每个记录进行很多查询。该脚本: 从调用表中获取一个数字,在循环中从length(number)到1 => $ prefix做子字符串 进行查询:从前缀中选择count(*),例如“ $ prefix”之类的代码 如果count> 0,则使用第一个前缀并写入表 第一个问题是查询计数-是call_records * length(number)。第二个问题是LIKE表达式。恐怕这些很慢。 …

3
tempdb日志文件的最佳做法
我在这里和那里已经读过许多关于如何配置tempdb数据文件的博客,但是我没有找到有关tempdb日志文件的任何信息。 这是我目前在tempdb中使用的策略: 我已使用Paul Randal的建议来分割tempdb数据文件 我已将tempdb数据文件的大小设置为最大,并禁用了自动增长。例如,我有100gb的可用磁盘空间,并将8个tempdb数据文件的大小分别设置为10gb。如布伦特·奥扎尔(Brent Ozar)所建议,这可以防止磁盘碎片,而且我的日志文件还有20GB可用空间。 但是就像我说的,没有人在谈论tempdb日志文件。我该怎么办?在我的设置中,此文件与tempdb数据文件位于同一位置。我应该与tempdb日志文件一起使用的大小和自动增长值是多少?

2
SQL Server数据压缩绝对适合只读数据库吗?
我读过一些有关SQL Server数据压缩的文献,指出写入成本增加到通常需要的四倍。似乎还暗示这是数据压缩的主要缺点,强烈暗示对于只读存档数据库,使用100%填充页面的数据压缩将提高性能(仅少数例外)。 以上陈述正确吗? 数据压缩与其他方式(用于读取)之间的主要“差异”是什么? “ CPU + x%”? “ IO -y%”? 页面拆分发生了吗? tempdb的用法? RAM使用率? 和写作? 出于这个问题的目的,您可以将上下文限制为大型(> 1TB)数据库的PAGE级压缩,但是始终欢迎其他注释。 参考文献: SQL Server存储引擎博客(DW场景显示压缩非常有优势) 数据压缩:策略,容量规划和最佳实践 确定压缩内容的更详细方法涉及分析每个表和索引的工作负载特征。它基于以下两个指标: U:相对于该对象的总操作数,特定表,索引或分区上的更新操作数的百分比。U的值越低(即不经常更新表,索引或分区),则它越适合用于页面压缩。 S:表,索引或分区上的扫描操作相对于该对象上的全部操作的百分比。S的值越高(即,表,索引或分区大部分被扫描),则用于页面压缩的候选值越好。 以上两种情况都明显偏向于建议为DW样式的数据库建议页面压缩(读密集型/排他性大数据操作)。

1
错误:在无法接受集合的上下文中调用了set_valued函数。什么事啊
我在ubuntu 12.04上使用Postgresql 9.1。 克雷格的回答启发,我的问题类型SETOF或SETOF纪录的级联我以为我会使用顺利return query,setof record等一系列的发电机到这个PLPGSQL功能: create or replace function compute_all_pair_by_craig(id_obj bigint) returns setof record as $$ begin return query select o.id, generate_series(0,o.value) from m_obj as o; end; $$ language plpgsql; 在执行过程中,我得到了错误: ERROR: set_valued function called in context that cannot accept a set 怎么了 ?与Craig相反,我告诉函数返回setof record。 我可以实现与Craig完全一样的工作,即通过定义类型create type pair_id_value as …

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.