我在 SQL Azure 数据库中有一个名为“查找”的架构。
公共数据库角色具有对该架构授予的 SELECT 权限。
但我如何通过查询看到这一点?我花了过去几个小时在网上搜索,但尚未找到一个查询,该查询将显示授予公共角色的特定架构和对象的权限。
有人可以建议吗?
我在 SQL Azure 数据库中有一个名为“查找”的架构。
公共数据库角色具有对该架构授予的 SELECT 权限。
但我如何通过查询看到这一点?我花了过去几个小时在网上搜索,但尚未找到一个查询,该查询将显示授予公共角色的特定架构和对象的权限。
有人可以建议吗?
我可以在 AdventureWorks 表 Person.Person 上创建以下约束:
ALTER TABLE Person.Person ADD CONSTRAINT ConstantScan CHECK (LastName <> N'Doesn''t Exist')
这告诉 SQL Server LastName 的值不能为Doesn't Exist
优化器在以下简单查询中利用了这一点:
SELECT *
FROM Person.Person
WHERE LastName = N'Doesn''t Exist'
由于约束告诉优化器列中没有任何内容可以等于我们正在平等搜索的值(假设有可信约束),因此优化器仅执行持续扫描并且“不执行任何操作”
如果我放弃上面的约束并创建一个稍微不同的约束:
ALTER TABLE Person.Person ADD CONSTRAINT ConstantScan2 CHECK (LastName <> N'Doesn''t Exist' AND FirstName <> N'Doesn''t Exist')
并使用谓词运行查询,其结果将违反检查约束:
SELECT *
FROM Person.Person
WHERE FirstName = N'Doesn''t Exist' AND
LastName = N'Doesn''t Exist'
我们通过键查找进行索引查找
但是,如果我跑
SELECT *
FROM Person.Person
WHERE FirstName = N'Doesn''t Exist' AND
LastName = N'Doesn''t Exist'
仅保留原始约束:
ALTER TABLE Person.Person ADD CONSTRAINT ConstantScan CHECK (LastName <> N'Doesn''t Exist')
我再次得到持续的扫描
当约束禁止其结果时,为什么在使用两个谓词运行查询时无法获得持续扫描?我是否正确地假设这只是优化器内功能的限制?
开始
doadmin.Database().__init__()
班级
class Database(object):
connection = None
cursor = None
def get_c(self):
return self.cursor
def __init__(self):
if Database.connection is None:
try:
Database.connection = mysql.connector.connect(host="stuff", user="stuff", password="stuff",
database="stuff", port=stuff)
Database.cursor = Database.connection.cursor()
except Exception as error:
print("Error: Connection not established {}".format(error))
else:
print("Connection established")
self.connection = Database.connection
self.cursor = Database.cursor
要求
cursor1 = Database().get_c()
cursor1.execute("SELECT * FROM posts")
posts = list(cursor1)
我在服务器(外部)上有一个数据库,该数据库有多个我连接到的表。
我创建了一个选择查询,它执行各种连接,并为我提供了所需的数据的最终视图。(我一直在使用临时表进行测试)
下一步是如何将此选择查询连接到不同(本地)服务器中的表?
简而言之:
奖金问题
一旦我实际创建/更新/插入,我该如何安排这按计划完成?
有没有办法禁止使用 Postgres 中低于指定级别的隔离级别?我希望数据库中所有事务的隔离级别至少是可重复读取,例如,如果用户尝试设置已提交读取,则会引发错误。
我正在对一项作业的性能问题进行故障排除,该作业在 SQL Server 2019 上完成的时间比 2012 年运行时的时间长了 5 小时。
该作业有问题的步骤之一是在批量加载到操作数据存储类型的数据库 (ODS) 期间,该数据库从不同源获取数据并插入到每晚截断并重新加载的表中,索引在加载之前被禁用它们最终会被一一按名字重建,而不是全部重建。
尽管表中有四个禁用的索引,但我看到它们的相关统计信息仍在每天更新:
统计 | 统计类型 | 被禁用 | 统计数据上次更新 | 行数 | 采样行数 | 未过滤的行 | 行修改 | 直方图步骤 |
---|---|---|---|---|---|---|---|---|
IX_1 | 指数统计 | 是的 | 2023-07-27 03:07:00.4566667 | 238634988 | 617299 | 238634988 | 4963 | 3 |
IX_2 | 指数统计 | 是的 | 2023-07-27 03:07:24.8866667 | 238634988 | 617299 | 238634988 | 4963 | 200 |
IX_3 | 指数统计 | 是的 | 2023-07-27 08:29:01.5266667 | 238634988 | 617290 | 238634988 | 4963 | 199 |
IX_4 | 指数统计 | 是的 | 2023-07-27 03:07:34.0233333 | 238634988 | 617299 | 238634988 | 4963 | 192 |
此外,我还发现一些查询的执行计划考虑了禁用索引中的这些统计信息,这正常吗?
<OptimizerStatsUsage>
<StatisticsInfo Database="[x]" Schema="[dbo]" Table="[y]" Statistics="[IX_3]" ModificationCount="22" SamplingPercent="0.257925" LastUpdate="2023-07-20T09:51:44.88" />
<StatisticsInfo Database="[x]" Schema="[dbo]" Table="[y]" Statistics="[IX_2]" ModificationCount="0" SamplingPercent="0.257925" LastUpdate="2023-07-20T03:28:08.59" />
由于该数据库每天都会截断和加载表的性质,我是否应该为整个数据库或某些表关闭 AUTO_UPDATE_STATISTICS ?
当我查询 sys.dm_db_stats_properties 时,有许多自动创建的统计信息,其中包含超过 2 亿行修改。
任何意见将不胜感激,谢谢!
我有一台服务器(MySQL 8.0.21),它用不作为主机存在的名称替换主机名或地址,因此无法连接。一个例子:
PS G:\workspace> mysql -u root -p -h geolaptop
Enter password: ********
ERROR 1045 (28000): Access denied for user 'root'@'gut-monitor' (using password: YES)
P
或者
PS G:\workspace> mysql -u root -p -h 192.168.1.69
Enter password: ********
ERROR 1045 (28000): Access denied for user 'root'@'gut-monitor' (using password: YES)
PS G:\workspace>
我已经设置skip-name-resolve
为On
. 我查询过performance_schema.host_cache
:
mysql> use performance_schema;
Database changed
mysql> select * from host_cache;
Empty set (0.00 sec)
那么如何改变主机,或者更好的是,如何让它停止呢?
编辑:服务器的C:\Windows\System32\drivers\etc\hosts
:
...
127.0.0.1 match
127.0.0.1 diet
127.0.0.1 diet-fork
127.0.0.1 df2
127.0.0.1 pma
127.0.0.1 test
127.0.0.1 cr2
127.0.0.1 whodat
192.168.1.69 geolaptop
geolaptop的主机文件:
...
127.0.0.1 castlerockhoa
127.0.0.1 hw_errors
192.168.1.76 gwb-10
192.168.1.76 diet-fork
192.168.1.76 gut-monitor
我有可能为这项任务选择了错误的工具,如果您知道更好的工具,请随时提出建议。
任务:我需要存储键值对。
123,7,13565
而不是1,2,3
)Redis 是一个键值存储,所以我想使用它,但是在内存中保留这么大的数据库成本太高,所以我想以一种将从内存中获取数据作为缓存的方式配置 Redis,并且当缓存未命中时 - 来自磁盘。
所以,这与Redis作为备份的持久性无关。
除了 Redis 我还尝试过:
key='abcdef' => ab/cd/ef
. Ext2、BtrFS,尝试将写入分布到 16 个分区(约 0.5M 对后性能非常糟糕)我还考虑过带有数据分层的 AWS Elasticache Redis,但最便宜的实例对我来说成本高昂(约 600 美元/月)
我怎样才能做到这一点?
我一直在一个环境中工作,其中每个索引创建都在单个核心上进行。大或小的索引/表。即使当我在创建中强制 maxdop 时,它仍然会忽略它并在单核上运行。
MaxDop 设置为 0。可用核心为 24。成本阈值设置为 5。索引创建成本超过 1000。SQL 配置内存为:160GB,即使最大 128GB。
运行的 SQL 服务器:Microsoft SQL Server 2019 (RTM-CU18) (KB5017593) - 15.0.4261.1 (X64) 2022 年 9 月 12 日 15:07:06 版权所有 (C) 2019 Windows Server 2019 上的 Microsoft Corporation 标准版(64 位)标准 10.0(内部版本 17763:)(管理程序)
为什么不能并行呢?
给定 3 个表(例如posts
、comments
和tags
),有没有办法让其中一个表的外键引用另外两个表之一的主键?
CREATE TABLE IF NOT EXISTS posts (
id UUID DEFAULT uuid_generate_v4 ()
CONSTRAINT posts_pk PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS comments (
id UUID DEFAULT uuid_generate_v4 ()
CONSTRAINT comments_pk PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS tags (
id UUID DEFAULT uuid_generate_v4 ()
CONSTRAINT tags_pk PRIMARY KEY
);
DROP TYPE IF EXISTS s_type;
CREATE TYPE s_type AS ENUM (
'POST',
'COMMENT'
);
CREATE TABLE IF NOT EXISTS tag_mentions (
id UUID DEFAULT uuid_generate_v4 ()
CONSTRAINT tag_mentions_pk PRIMARY KEY,
source_type s_type NOT NULL,
source_id UUID NOT NULL
CONSTRAINT tag_mention_id_fk
-- Is something like this possible?
REFERENCES posts (id) OR comments (id)
);
s_type
也许有一种方法可以通过和posts
和ID之间的复合索引来做到这一点comments
?