我读了这篇关于 PostgreSQL 在 SSD 上的性能的文章:
这两种配置似乎很重要random_page_cost
vsseq_page_cost
由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?
更新
我有这些步骤:
- 脚本创建一些虚拟表
- 脚本将数据插入到表中
- 脚本执行一些查询
- 脚本显示 random_page_cost 和 seq_page_cost 的匹配值
- 人工或自动化系统获取这些值并更新配置。这一步不是问题的一部分。
我读了这篇关于 PostgreSQL 在 SSD 上的性能的文章:
这两种配置似乎很重要random_page_cost
vsseq_page_cost
由于两个参数都需要匹配特定的硬件,我想知道是否可以自动检测匹配值?
更新
我有这些步骤:
我有一个 1.4TB 的 SQL Server 数据库,它在磁盘 I/O 方面遇到了巨大的困难。我们已经在服务器中安装了一个新的 SSD 阵列,它将解决我们所有的问题,我们只是在讨论移动数据库的最佳方式。理想情况下,如果我们可以在不停机的情况下做到这一点,那是最好的。但是,如果要在两天的性能不佳(例如,在复制数据时)与两小时的停机时间之间进行选择,则后者可能更可取。
到目前为止,我们提出的解决方案是:
简单的复制。使数据库脱机,复制文件,更改 SQL Server 中的位置并将其重新联机。粗略的数字估计这将需要长达五个小时,这不是真正可以接受的,但它是最简单的解决方案。
块级副本。使用类似 rsync 的实用程序,我们在数据库启动时在后台复制文件。当我们准备好迁移时,我们将数据库脱机,使用此实用程序进行差异复制,然后将 SQL Server 指向新文件并使其联机。这里的时间是未知的。我们不知道对 1.4TB 进行差异分析并将其复制过来需要多长时间。我们的另一个顾虑是块级副本会使文件处于 SQL Server 无法读取的某些状态,这会浪费我们的时间。
SQL 迁移。在新磁盘上创建一个新的 1.4TB SQL 数据文件并禁用所有其他文件的自动增长。然后依次对所有其他数据文件运行 DBBC SHRINKFILE(-file_name-, EMPTYFILE)。一旦所有数据都传输完毕,我将在某个时间安排一个预定窗口将 MDF 文件移动到 SSD 并删除其他未使用的文件。我喜欢这个,因为它可以最大限度地减少停机时间。但我不知道这需要多长时间,以及它是否会导致性能下降。
我们没有任何类型的负载和性能环境来测试它。我可以验证这些策略是否适用于我们的暂存环境,但不是影响,也不是性能。
几乎每天一次,我会在控制台中出现超时,例如:
7:1:36 PM kernel: Areca RAID volume scsi command timeout (target=0 lun=0)
这恰好对应于所有 postgres 进程挂起的时间。
我不愿意终止 pids,因为这往往会导致一切崩溃。无论如何要复活这些过程?我什至无法在终端中打开一个新的 postgres 窗口。
另外,有没有办法让 postgres 更能容忍这种超时?我的系统:
我用于表空间的驱动器(其中 4 个)是:
我正在使用 whm/cpanel 升级到更快的服务器,mysql 数据库将位于 SSD 上。我读过一些关于不需要任何查询缓存和类似内容的文章,但作为新手,我了解到修改 my.cnf 可能是灾难性的。
这是我基于“硬盘”的网络服务器的当前 my.cnf。
[mysqld]
query_cache_limit=32M
query_cache_size=128M
query_cache_type=1
query_cache_min_res_unit=4096
open_files_limit=16000
table_open_cache=25000
table_definition_cache=2000
key_buffer_size=128M
innodb_buffer_pool_size=2000M
innodb_buffer_pool_instances=2
join_buffer_size=4M
sort_buffer_size=4M
read_rnd_buffer_size=4M
tmp_table_size=3048M
max_heap_table_size=3048M
thread_cache_size=256
max_connections=250
table_cache=60000
如果 mysql 在 SSD 上,您会对其进行哪些更改?
以下是来自 tuner.sh 的一些信息:
Avg. qps = 447
WORKER THREADS
Current thread_cache_size = 256
Current threads_cached = 96
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine
MAX CONNECTIONS
Current max_connections = 250
Current threads_connected = 20
Historic max_used_connections = 116
The number of used connections is 46% of the configured maximum.
Your max_connections variable seems to be fine.
INNODB STATUS
Current InnoDB index space = 794 M
Current InnoDB data space = 1.10 G
Current InnoDB buffer pool free = 14 %
Current innodb_buffer_pool_size = 1.95 G
Depending on how much space your innodb indexes take up it may be safe
to increase this value to up to 2 / 3 of total system memory
MEMORY USAGE
Max Memory Ever Allocated : 3.62 G
Configured Max Per-thread Buffers : 3.02 G
Configured Max Global Buffers : 2.21 G
Configured Max Memory Limit : 5.23 G
Physical Memory : 15.56 G
Max memory limit seem to be within acceptable norms
KEY BUFFER
Current MyISAM index space = 222 M
Current key_buffer_size = 128 M
Key cache miss rate is 1 : 1115
Key buffer free ratio = 72 %
Your key_buffer_size seems to be fine
QUERY CACHE
Query cache is enabled
Current query_cache_size = 128 M
Current query_cache_used = 28 M
Current query_cache_limit = 32 M
Current Query cache Memory fill ratio = 22.42 %
Current query_cache_min_res_unit = 4 K
Your query_cache_size seems to be too high.
Perhaps you can use these resources elsewhere
MySQL won't cache query results that are larger than query_cache_limit in size
SORT OPERATIONS
Current sort_buffer_size = 4 M
Current read_rnd_buffer_size = 4 M
Sort buffer seems to be fine
JOINS
Current join_buffer_size = 4.00 M
You have had 166 queries where a join could not use an index properly
join_buffer_size >= 4 M
This is not advised
You should enable "log-queries-not-using-indexes"
Then look for non indexed joins in the slow query log.
OPEN FILES LIMIT
Current open_files_limit = 120260 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine
TABLE CACHE
Current table_open_cache = 60000 tables
Current table_definition_cache = 2000 tables
You have a total of 733 tables
You have 851 open tables.
The table_cache value seems to be fine
TEMP TABLES
Current max_heap_table_size = 2.97 G
Current tmp_table_size = 2.97 G
Of 262494 temp tables, 33% were created on disk
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.
TABLE SCANS
Current read_buffer_size = 128 K
Current table scan ratio = 1005 : 1
read_buffer_size seems to be fine
TABLE LOCKING
Current Lock Wait ratio = 1 : 101097
Your table locking seems to be fine
OLD 网络服务器是一个 8 核单 Xeon @ 16GB 内存。新的网络服务器是一个 24 核双至强@64GB 内存。新服务器上的 SSD 将仅包含操作系统和数据库,所有站点均基于 WordPress,因此每天的总浏览量约为 250,000 次。
非常感谢您的帮助或建议!
问候,
本
我有一个 SQL Server Express 2008 实例,我经常从开发系统中附加数据库。通常我将.MDF
和.LDF
文件传输到实例的DATA
文件夹并重新附加,一切都很好。过去,当我们使用 Access 而不是 SQL Server Express 时,我会将数据库文件保存在单独的驱动器 (SSD) 上,这往往会提高性能,同时让我在整个 SSD 上使用 BitLocker 驱动器加密,以便于加密和整体驱动器备份。我想对 SQL Server Express 做同样的事情。
我可以将.mdf
and.ldf
文件放在单独的驱动器上(而不是在实例DATA
文件夹中)而不会产生任何不良影响吗?我是否需要通过 Management Studio 更改设置才能执行此操作?我还能使用 BitLocker 加密吗?
非常感谢!