我试图了解 Azure 混合和地理区域情况下的自动故障转移与始终在可用性组上的对比:
是否可以在同一个可用性组中拥有本地 SQL 数据库、VM SQL 数据库和 Azure 数据库?或者是否需要将内部部署数据库与单独的始终在线可用性组中的云数据库分开?
在混合情况下无法进行自动故障转移,必须手动强制执行。但是,自动故障转移是否可以在云中跨区域实现,还是必须在同一区域进行?
我试图了解 Azure 混合和地理区域情况下的自动故障转移与始终在可用性组上的对比:
是否可以在同一个可用性组中拥有本地 SQL 数据库、VM SQL 数据库和 Azure 数据库?或者是否需要将内部部署数据库与单独的始终在线可用性组中的云数据库分开?
在混合情况下无法进行自动故障转移,必须手动强制执行。但是,自动故障转移是否可以在云中跨区域实现,还是必须在同一区域进行?
为了说明我的问题,以下是一个查询,检测尚未插入数据仓库的订单 ID 并插入它们:
With NewOrders
As
(
Select OrderID From Orders
Except
Select OrderID From FactOrders
)
Insert Into FactOrders(OrderID, OrderDate, CustomerId)
Select OrderID, OrderDate, CustomerId From Orders
Where OrderID in (Select OrderID from NewOrders);
假设第一次运行查询并Orders
包含 4 亿行或更多行:
SQL Server 可以在一条INSERT
语句中处理这么多行吗?
如果没有,我应该如何进行?INSERT
我应该限制语句中提取的行数吗?INSERT
引擎在一条语句中可以处理多少行?
假设我有一个定义如下的表:
CREATE TABLE my_tbl (
id bigint,
a1 bigint[],
a2 bigint[]
);
我想创建一个存储过程来将值附加到a1
和a2
。这是正确的方法还是有更简单的方法?
CREATE OR REPLACE FUNCTION append(
iid bigint,
next_a1 bigint,
next_a2 bigint)
DECLARE
r "my_tbl";
tmp_a1 bigint[];
tmp_a2 bigint[];
BEGIN
FOR r IN SELECT * FROM "my_tbl"
WHERE r."id" = iid
FOR UPDATE
LOOP
tmp_a1 := r.a1 || next_a1;
tmp_a2 := r.a2 || next_a2;
UPDATE my_tbl SET ( "a1", "a2" ) = ( tmp_a1, tmp_a2 )
WHERE "id" = iid;
END LOOP;
END; $$
LANGUAGE plpgsql;
我在 Postgresql 9.2 上。
在以下 PgSql 存储函数中:
CREATE OR REPLACE FUNCTION get_offer_from_id(
offer_id bigint)
RETURNS json AS $$
DECLARE
res "entity_data_result";
r "get_offer_data";
BEGIN
FOR r IN SELECT * FROM "get_offer_data"
WHERE "id" = offer_id
LIMIT 1
FOR SHARE
LOOP
res.found := true;
res.data := row_to_json(r);
END LOOP;
RETURN row_to_json(res);
END; $$
LANGUAGE plpgsql;
使用 FOR SHARE 是否有真正的好处,或者可以将其从查询中删除?
在该postgresql.conf
文件中,可以为ssl_cipher
. 然而,我找不到解释 ALL、ADH、LOW、EXP、MD5 和 STRENGTH 值对应的文档。
MD5 指的是对应的 MD5 算法我猜,但是其他的值呢?我认为 LOW 不应该在生产环境中使用。
我在 PostGreSql 数据库中有一个表,定义如下:
CREATE TABLE public."MATCH"(
"ITEM_A_ID" bigint DEFAULT 0,
"ITEM_B_ID" bigint DEFAULT 0,
"OWNER_A_ID" bigint DEFAULT 0,
"OWNER_B_ID" bigint DEFAULT 0,
"OTHER_DATA" varchar(100) NOT NULL DEFAULT ''
CONSTRAINT "MATCH_PK" PRIMARY KEY ("ITEM_A_ID","ITEM_B_ID")
);
它将包含很多行。将在此表上执行许多类似以下的查询:
SELECT * FROM "MATCH" WHERE "OWNER_A_ID" = owner_a_id;
SELECT * FROM "MATCH" WHERE "OWNER_B_ID" = owner_b_id;
我正在考虑在OWNER_A_ID
and上创建索引OWNER_B_ID
,因为这些列不是键。这是一个好主意,如果是,我应该如何创建这些?我应该用两列创建一个索引吗?我应该创建两个索引吗?我应该包括其他列吗?
我一直在阅读有关时间戳的 Postgres 文档,但我仍然有点困惑。
我需要存储当前时间和 UTC 1970 年 1 月 1 日午夜之间的时间,以毫秒为单位(就像在Java中定义的那些,但我没有使用 Java)。
如果我正确阅读了文档,我相信我必须使用CURRENT_TIMESTAMP
,因为它包含时区。正确的?
有人可以解释如何创建一个存储过程,将这个时间戳转换为我想要的毫秒数(以及反向函数)吗?
动机:我知道在选择行时可以使用类似EXTRACT
on 的东西,但是这种转换会比以毫秒为单位存储时间更昂贵。CURRENT_TIMESTAMP
我准备将我的时刻存储到一个bigint
. 比较时刻或计算时间差会更快。
我有一个包含三列的 MySql 表:
CU VARCHAR(3)
DA DATETIME
VA DOUBLE
我需要REPLACE into mytable (CU, DA, VA) values("ABC", mydate, myval)
从 Java 执行几条语句。mydate
是一个Date
并且myval
是一个double
。
我的问题是,假设我连接到我的数据库,我该如何格式化mydate
并myval
正确地包含在这个字符串语句中?
我有一种情况失控,因为我需要在大型目录结构中随机访问越来越多的小静态文件。我必须很快大幅减少这些文件的数量。我正在研究释放压力的快速解决方案。
一种选择是将文件的内容(UTF8 文本)移动到数据库中并执行SELECT
s 以替换文件搜索(按名称)。选择语句如下:
SELECT TOP(1) MyContent FROM MyTable WHERE MyContentName LIKE 'criteria%';
SELECT TOP(1) MyContent FROM MyTable WHERE MyContentName LIKE '%othercriteria';
SELECT TOP(1) MyContent FROM MyTable WHERE MyContentName LIKE '%andanothercriteria%';
我们谈论的是每天在 800K 行的表上总共有 200K 的请求(如果有帮助,我可以轻松地将其分成两部分)。MyContentName
是键的一部分,将被索引。要么有一个条目与表中的条件匹配,要么没有。
我不是数据库管理员专家。这是共享服务器上的 MySQL 实例可以支持的,还是我的期望太高了?
我知道典型的答案是:我应该测试。不幸的是,由于紧急情况,我没有时间进行测试。我需要找到一个快速的解决方案,即使是临时的,即使它会稍微降低服务响应延迟。
我正在寻找经验丰富的数据库管理员对此策略的意见。也欢迎提示和建议。
我不是 DBA。我有一个 MySQL 数据库(5.0.51a)的情况,我想为所有具有此前缀的表(大约 110 个表)删除一个“dr_”前缀。我当然可以一一重命名它们,但我想知道是否有一个 SQL 命令可以一次性执行此操作?
为了清楚起见,dr_hjkd
必须将名为的表重命名为hjkd
. 一个名为的表rfefd
将保持相同的名称。谢谢。
我已经在我的电脑(Win 7)上安装了 PostgreSQL 9.1。我有一个小型 Java 应用程序使用login=sa
和成功连接到它password=""
。连接有效。
但是,它被 PgAdmin III 本身拒绝。我得到:
Error connecting to the server: fe_sendauth: no password supplied
如何使用空密码从 PgAdmin III 连接到我的数据库?
编辑
这只是一个测试,而不是生产代码。
H2 是一个单线程数据库,在性能方面享有盛誉。其他数据库是多线程的。
我的问题是:什么时候多线程数据库比单线程数据库更有趣?有多少用户?有多少进程?触发器是什么?有人有经验可以分享吗?
概括