我正在寻找一种有效收集统计数据的方法,这些统计数据可以告诉我在给定的时间段内每个函数被调用的次数。
高效,我的意思是 stat 收集器应该使用尽可能少的磁盘 I/O 操作。
如果我还可以跟踪更多统计数据(例如返回时间),那就太好了,但这不是必需的。
我很困惑,因为没有为许多模式中的某些表收集统计信息.这些表已经在上一次夜间进行了分析,我认为这是由已启用的作业自动优化器统计作业完成的.我尝试通过接收手动收集统计数据时意识到这一点:
ora-20005 object statistics are locked
Run Code Online (Sandbox Code Playgroud)
在Tuning Advisor下令收集长时间运行查询的统计信息.
什么可以锁定这些统计数据 可以默认禁用吗?我认为没有人这样做,因为从长远来看,这种行为没有任何好处.
经过一些研究后,我找到了部分答案:https: //blogs.oracle.com/optimizer/entry/maintaining_statistics_on_large_partitioned_tables
我还发现通过每晚运行的分区程序发现统计信息被锁定为分区表,有一行:
dbms_stats.lock_table_stats(...)
Run Code Online (Sandbox Code Playgroud)
我不知道是好还是坏?我想前段时间它很好但是从Oracle 11g起它根本就没有意义.我将尝试介绍增量统计维护(docs)的方法,而不是禁用全球统计收集,我认为这是废弃的想法......
我问这个问题是因为我想了解如何更好地运行 RethinkDB,这意味着它应该在什么样的硬件上运行,应该在什么样的文件系统上运行,以及其他系统配置来最大化它的吞吐量。
我正在尝试尽可能快地用{"n": <counter>, "rand": <Math.random()>}. 我在某处读到这对于 200 个文档的批处理速度更快,所以这就是我要插入的内容。我也在使用柔软的耐用性。我开始了一个 nodejs 进程,我可以平均每秒插入 10k 个文档,非常好。
但是在发生这种情况时,rethinkdb 使用了大约 70% 的一个核心(我有 8 个虚拟核心,它是 i7-4770),而 nodejs 进程使用了 5%。所以看起来CPU不是瓶颈。
一旦我开始另一个 nodejs 进程做同样的事情,两个进程上的每秒插入次数就会下降到大约 4k-5k。同样,CPU 负载保持不变。
我解雇了iotop,我确实在那里看到了很多行动,但不是我所期望的。我在 RAID0 中配置了两个 SSD,快速dd测试表明我可以以大约 800MBps 的速度写入和读取。这远高于 iotop 报告的实际读取和实际写入速度(平均读取 ~14MBps 平均写入 ~50MBps)。
那么我怎样才能耗尽我机器的资源呢?rethinkdb 需要什么才能运行得更快?为什么它不花费更多的资源并具有更高的吞吐量?
关于它运行的更多信息:它是Hetzner 的 EX40SSD,软件 RAID0 中的两个 SSD,ext4 文件系统(明天我将尝试安装它,noatime看看它是否更好)。默认情况下,rethinkdb 配置就是一切,插入是对只有一个分片和一个副本的表进行的。请随时询问我可能忘记提及的任何其他相关问题。
提前致谢。
performance resources database-performance node.js rethinkdb
给定以下架构:
create table dbo.SomeTable
(
ID int primary key identity(1, 1),
SomeColumn varchar(50)
);
create index IX_SomeColumn on dbo.SomeTable (SomeColumn);
Run Code Online (Sandbox Code Playgroud)
并用一些数据填充它:
declare @i int = 1000;
while @i > 0 begin
set @i = @i - 1;
insert dbo.SomeTable (SomeColumn)
values (convert(varchar, @i))
end
Run Code Online (Sandbox Code Playgroud)
此查询执行索引搜索:
select ID
from dbo.SomeTable
where SomeColumn = '431'
Run Code Online (Sandbox Code Playgroud)
此查询执行索引扫描时:
select ID
from dbo.SomeTable
where case when SomeColumn = '431' then 1 else 0 end = 1
Run Code Online (Sandbox Code Playgroud)
有没有办法让后者(或类似的东西)执行索引搜索?
我问,因为我希望能够将其case when放入视图的选择列表并在where子句中使用它,但如果我无法让SQL Server执行索引,它将永远不会像原始格式一样好寻求.
嗨,下面是从不同表中获取不同数据计数的查询。
select(
select count(*)
from teachers
where teacher_status = 1
)as teacher_count,
(
select count(*)
from students
where student_status = 1
)as students_count,
(
select count(*)
from housekeepers
where housekeeper_status = 1
)as housekeeping_count,
(
select count(*)
from students
where student_status = 1 and
gender = "Male"
) as total_male_student_count,
(
select count(*)
from students
where student_status = 1 and
gender = "Female"
) as total_female_student_count
Run Code Online (Sandbox Code Playgroud)
现在我想在 codeigniter 构建器类的帮助下在 codeigniter 中构建这个单个查询,所以有人可以指导我吗..
运行单个查询的目的是最小化数据库命中。
提前致谢..!!!
我有一个在 MariaDB 10.1.18 下运行的应用程序,但我遇到了数据损坏的问题。因此,在 my.cnf 中,我更改参数 innoDB_force_recovery = 1 以忽略它们。但是,我无法在表中插入。但是我认为当 innoDB_force_recovery = 4 时禁止插入。当 innoDB_force_recovery = 1 时是否可以进行插入?此致。克里斯托夫
假设有一个“系列值”的 SQL 数据库。每个都Value属于 a Series,并且有一个日期:
@Entity
class Series { … }
Value {
Series series;
Date date;
…
}
Run Code Online (Sandbox Code Playgroud)
对于系列和日期的每个组合,每个值都是唯一的,由该索引保证:
UkSeries UNIQUE INDEX value (series ASC, data ASC)
Run Code Online (Sandbox Code Playgroud)
在Hibernate中,上面的索引就是通过这个注解创建的:
@Table (
uniqueConstraints = @UniqueConstraint (columnNames = {"series", "data"}))
Run Code Online (Sandbox Code Playgroud)
现在,请将它与这个可能的替代索引定义进行比较:
UkSeries UNIQUE INDEX value (series ASC, data ASC)
IdxSeries INDEX value (series ASC, data ASC)
@Table (
uniqueConstraints = @UniqueConstraint (columnNames = {"series", "data"}),
indexes = { @Index (name = "IdxSeries", columnList = "series, data") })
Run Code Online (Sandbox Code Playgroud)
考虑到我还想加快在数据库中搜索值的速度,我的问题是 …
faults我的MongoDB数据库中有一个集合,每个文档都有这些字段:rack_name,timestamp
为了测试和比较性能,我创建了这两个索引:
rack -> {'rack_name': 1}
和
time -> {'timestamp': 1}
现在我用explain()执行了以下查询:
db.faults.find({
'rack_name': {
$in: [ 'providence1', 'helena2' ]
},
'timestamp': {
$gt: 1501548359000
}
})
.explain('allPlansExecution')
Run Code Online (Sandbox Code Playgroud)
结果如下:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "quicktester_clone.faults",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"timestamp" : {
"$gt" : 1501548359000.0
}
},
{
"rack_name" : {
"$in" : [
"helena2",
"providence1"
]
}
}
]
},
"winningPlan" : { …Run Code Online (Sandbox Code Playgroud) indexing mongodb database-performance query-performance mongodb-query
附在本文末尾的 Python3 脚本创建了一个包含 5INT列的简单表,其中 3列带有索引。
然后它使用多行插入来填充表。
一开始,它设法每秒插入大约 10000 行。
Took 0.983 s to INSERT 10000 rows, i.e. performance = 10171 rows per second.
Took 0.879 s to INSERT 10000 rows, i.e. performance = 11376 rows per second.
Took 0.911 s to INSERT 10000 rows, i.e. performance = 10982 rows per second.
Took 1.180 s to INSERT 10000 rows, i.e. performance = 8477 rows per second.
Took 1.030 s to INSERT 10000 rows, i.e. performance = 9708 …Run Code Online (Sandbox Code Playgroud) sql bulkinsert sqlperformance database-performance cockroachdb
我使用 docker/docker-compose 来运行服务和测试。其中一项服务是 mysql:
db:
image: mysql:5.6
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
expose:
- "3306"
Run Code Online (Sandbox Code Playgroud)
有什么方法可以专门针对测试优化容器的速度(例如,将所有内容保存在内存中等)?
mysql ×4
indexing ×2
sql ×2
bulkinsert ×1
cockroachdb ×1
codeigniter ×1
database ×1
docker ×1
mariadb ×1
mongodb ×1
my.cnf ×1
node.js ×1
oracle11g ×1
performance ×1
php ×1
postgresql ×1
resources ×1
rethinkdb ×1
sql-server ×1
testing ×1