数据库管理员

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

1
如何“提示”递归CTE的基数?
我使用以下递归CTE作为最小示例,但总的来说,优化程序必须对递归CTE使用默认的“猜测”基数: with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * …

1
确保时态数据库设计中唯一条目的正确方法是什么?
我在设计时态数据库时遇到了麻烦。我需要知道如何确保商店的给定时间范围内只有一条活动记录。我已经读过这个答案,但是恐怕我无法围绕触发器的工作原理来解决。特别是,我将如何触发现有的触发器,以防止对记录进行更新,而是插入一条新记录。我的真正问题是,当完成日期为null时,我不知道如何防止商店拥有多个生效日期。(即防止2条活动记录的商店)。 这就是我所拥有的,但是它允许我为具有不同生效日期的商店插入新记录。 表定义: /****** Object: Table [PCR].[Z_STORE_TEAM] Script Date: 05/09/2014 13:05:57 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) DROP TABLE [Z_STORE_TEAM] GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) BEGIN CREATE TABLE [Z_STORE_TEAM]( [STORENUM] …

1
用于处理10亿行和计数的数据库设计
我们以大约5000 pr的速率接收实时GPS数据。分钟(来自4个TCP服务器)。每个服务器使用单个连接来插入数据,并在两次插入之间缓冲数据。每隔15分钟左右,服务就会获取一次此数据,并将其处理为行程。生成行程后,仅当用户希望在地图上查看路线时,实际的GPS数据通常并不那么重要。 问题是数据库似乎在努力跟上插入数据的速度。有时,当负载增加时,插入时间突然急剧增加(> 30秒),这又使更多数据得以缓冲,从而导致更大的插入量和更长的插入时间。 我希望能对当前的设计发表一些评论,以及一些我们必须提高性能的想法,并回答我们的一些问题-以及人们可能拥有的其他技巧! 当前设计 当前将数据分为代表一周的表格,并且将早于一年的数据存档到辅助数据库中。整个事物在可编辑视图中连接在一起,该视图用于插入和读取。 桌子设计 ID(PK,唯一标识符) DeviceId(FK,int) PersonId(FK,int) VehicleId(FK,int) TokenId(FK,int) UtcTime(PK,datetime2(3)) 纬度(浮动) 经度(浮点) 速度(smallint) 标题(smallint) 卫星(tinyint) IOData(varbinary(100)) IgnitionState(tinyint) UserInput(tinyint) CreateTimeUtc(datetime2(3)) 指标 DeviceId_CreateTimeUtc_Desc DeviceId_UtcTime_Desc(集群) PersonId_UtcTime_Desc TokenId_UtcTime_Desc VehicleId_UtcTime_Desc 当前每个星期(包括索引)占用大约10 GB的数据,并且主数据库中目前大约有300 GB的数据。 主数据库中的数据表具有自己的文件组,其中包含1个文件,但它与主数据库中的所有其他表位于同一磁盘上。辅助数据库位于不同的磁盘上,但位于同一台计算机上。 我认为,当使用新的表分区(一周)时,我们每周还会运行一次索引重建作业。不执行收缩。 该计算机是具有12 GB内存的8核HP,并且包含主数据库的磁盘正在运行RAID 10。 主意 将存储在主数据库中的数据量限制为最多1个月。至少它可以使数据库更易于管理以进行备份/还原,但是通过这样做,我们可以期望看到性能的提高吗? 在文件组中为当前数据创建2个文件,并将它们分发到2个不同的物理分区中 创建保存当前数据的主从数据库,因此在不同数据库上执行插入和读取操作 将当前数据文件放在SSD磁盘上(镜像是否会对SSD磁盘产生任何性能差异?) 请让我知道是否需要更多信息。影响性能的因素很多,并且可能有许多调整方法。


2
AlwaysOn可用性组自动故障转移不起作用
使用AG设置,我启动了WSFC,并在一个称为DevClusterOnline的可用性组中配置了两个节点。两个节点(主要是DEV-AWEB5,次要是DEV-AWEB6)都运行Windows Server 2008 R2。 如果我检查AG的运行状况,则会得到以下信息: 运行以下查询将返回此结果集: select ar.replica_server_name, availability_group_name = ag.name, ar.availability_mode_desc, ar.failover_mode_desc from sys.availability_replicas ar inner join sys.availability_groups ag on ar.group_id = ag.group_id order by availability_group_name, replica_server_name; 如果断开DEV-AWEB5的连接,则无法连接到组侦听器(DevListener),但可以对其执行ping操作,并且它将响应我的ping操作。副本-DEV-AWEB6进入RESOLVING状态,并且无法访问我的数据库。但是,我可以手动进入Management Studio并将故障转移设置为DEV-AWEB6,然后重新启动并运行,DevListener将再次接受连接。 考虑到这些事实可确认故障转移确实有效,我已同步提交并配置了自动故障转移,因此我不知道安装程序是否出现故障该怎么办。 当我断开DEV-AWEB5的连接时,我希望我的副本将保持连接,因此,DevListener也将保持连接。我希望自动故障转移可以使我透明地连接到AG Listener。从最终用户的角度来看,使用Web系统应该不会注意到其中一台数据库服务器出现故障。 我被困在这里,有人可以启发我做错什么吗?

4
SQL Server 2012复制数据库失败
我想在同一SqlServer中复制数据库。因此,当我使用“复制数据库向导”时,它会引发错误:(我使用测试数据库执行了此步骤,并且工作正常!!!) 配置: 一个用户 方法:“使用SQL管理对象方法” 选择目标数据库的新名称。 错误: 标题:复制数据库向导 作业失败。检查目标服务器上的事件日志以获取详细信息。 - - - - - - - - - - - - - - - 纽扣: 好 在事件日志中: 系统 提供者 [名称] SQLSERVERAGENT 事件ID 208 [资格赛] 16384 3级任务3关键字0x80000000000000 创建时间 [SystemTime] 2014-05-07T06:23:11.000000000Z EventRecordID 123672频道应用程序计算机Server1安全 事件数据 CDW_Server1_Server1_3 0x666DE807F406D7438C65B09171211D7B 失败2014-05-07 10:52:50作业失败。作业由用户sa调用。运行的最后一步是步骤1(CDW_Server1_Server1_3_Step)。 日志文件的最后几行: OnProgress,Server1,NT Service \ SQLSERVERAGENT,Server1_Server1_Transfer …

3
遍历值一次剥离1个字符
我想遍历值并一次从值中删除1个字符并显示结果。 因此,如果我有一个带有值的表: ID ___ 34679 13390 89906 我希望结果看起来像这样 Id ---- 4679 679 79 9 3390 390 90 0 9906 906 06 6

1
SQL Server 2012年:Security_error_ring_buffer_recorded:ImpersonateSecurityContext
我管理的几个服务器在system_health XE会话中记录了很多事件。 名称:security_error_ring_buffer_recorded api_name:ImpersonateSecurityContext Calling_api_name:NLShimImpersonate 错误代码:5023 error_code 5023应该是(系统错误代码): ERROR_INVALID_STATE 5023 (0x139F) The group or resource is not in the correct state to perform the requested operation. 我在事件安全日志或SQL Server日志中都没有失败的登录事件。

1
定期定期高效删除大量(400万行)mysql数据
我们有一个mysql表,该表在任何给定时间都有大约1200万行。我们需要删除旧数据,以使表的大小易于管理。 现在,我们每天在午夜使用cron作业运行此查询: DELETE FROM table WHERE endTime < '1393632001' 上一次运行查询时,它检查了4,602,400,耗时3分钟,CPU瘫痪。 在仍然清除旧数据的同时,如何使CPU,同步数据库连接,磁盘提示深度等不会出现不合理的变化? PS:您会注意到,查询实际上是在使用周期中的不适当时间进行的。假设我们已经将查询的时间更改为每天使用的最低点。另外,“ endTime”上没有索引,如果可能的话,我宁愿保持这种方式,因为有很多数据被非常定期地插入,并且查找不多。
10 php  mysql 

6
Oracle 12c创建用户
我在企业Oracle数据库系统中创建用户时遇到一些问题。无法使用以下命令创建用户 create user name identified by password; 由于异常: ORA-65096:无效的普通用户或角色名称 因此,我在Google上找到了解决方案: alter session set container=PDBORCL; 然后-是工作。用户已创建。 但是我无法登录该帐户。怎么了?我向该帐户添加了所有特权(当然也创建了会话)。我收到错误消息: ORA-01017:无效的用户名/密码; 登录被拒绝。 这到底是怎么回事?

2
如何正确监视PostgreSQL数据库连接数?
我试图使用Nagios脚本来监视Postgres数据库上的数据库连接数,但我遇到了这个问题:这些计数被视为当前打开的连接,每5分钟测量一次。 SELECT sum(numbackends) FROM pg_stat_database; 不过,这似乎会错过大量的短期连接,因此统计数据与实际情况相去甚远。 我尝试手动运行该脚本,并且发现即使在两个连接之间相差几秒钟的情况下,也发生了很大的变化。 我如何以可靠的方式获取此信息?像max(connectios)发生在一个时间间隔内。


2
我删除了MySQL的“ performance_schema”数据库,如何创建它?
在解决ibdata / log问题时,我不小心删除了performance_schema数据库,我想创建一个新数据库。 mysql> SHOW VARIABLES LIKE 'perf%'; +---------------------------------------------------+---------+ | Variable_name | Value | +---------------------------------------------------+---------+ | performance_schema | ON | | performance_schema_events_waits_history_long_size | 10000 | | performance_schema_events_waits_history_size | 10 | | performance_schema_max_cond_classes | 80 | | performance_schema_max_cond_instances | 1000 | | performance_schema_max_file_classes | 50 | | performance_schema_max_file_handles | 32768 | …
10 mysql 

1
550万行/文档的MongoDB性能与PostgreSQL的对比
有人可以帮我比较这些查询,并解释为什么PostgreSQL查询在不到2000毫秒的时间内执行,而MongoDB聚合查询需要近9000毫秒,有时甚至高达130K毫秒? PostgreSQL 9.3.2 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit PostgreSQL查询 SELECT locomotive_id, SUM(date_trunc('second', datetime) - date_trunc('second', prevDatetime)) AS utilization_time FROM bpkdmp WHERE datetime >= '2013-7-26 00:00:00.0000' AND datetime <= '2013-7-26 23:59:59.9999' GROUP BY locomotive_id order by locomotive_id MongoDB查询 db.bpkdmp.aggregate([ …

1
带有IN()参数的PostgreSQL PREPARE查询
我正在尝试从PHP准备查询,例如: pg_prepare($con, "prep", "select * from test where tid in ($1)"); 然后执行以下命令: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); 问题是我无法传递由于prepare需要固定数量的参数而构建的一系列值。有什么方法可以使参数动态化?

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.