所以 - 我们有一个内部公司数据库,通常的东西:管理客户、电话、销售交易和客户协议/计划。
它是一个 Access 2000 前端和一个 SQL Server 2000 Standard 后端。单台服务器、双 Xeon 3.2GHz、2GB RAM、Windows Server 2003,整天获得大约 40% 的 CPU 负载,分布在操作系统 (HT) 可见的 4 个内核上。
后端数据库设计不佳,已经有机增长超过 10 年,由不那么熟练的人员维护。它被严重规范化,一些明显的问题包括具有数万行没有主键或索引的表,这些表也大量用于系统中一些最常用部分的多表连接(例如呼叫管理器应用程序,每天在每个人的第二台显示器上运行 8 小时,每隔几秒钟运行一次低效的大查询)。
前端也好不到哪里去,它是典型的由数百个表单、嵌套保存的查询、VBA 代码中编写不当的嵌入式 SQL、数十个“怪癖”等组成的典型混乱,并且每当进行更改时,一些无关的东西似乎都会中断。我们已经确定了一个运行“足够好”的 MDB,现在有一个不变的政策,因为我们内部没有 Access 重量级人物(也没有计划雇用一个)。
公司现在正在缓慢增长,增加客户、呼叫等数量,同时并发用户数量适度增加,最近性能明显变差(等待在表单之间移动,等待列表填充等) )
Perfmon 说:
SQL Server 的探查器每分钟看到数十万个查询。客户端上的 CPU 使用率几乎为零,表明它正在等待服务器端查询执行。我已经通过 DB Engine Tuning Advisor 处理了这个工作负载,并将其建议应用于测试备份,但这并没有产生太大的不同。
顺便说一下,我们有 100MB 和千兆以太网的混合,都在一个子网上,两层楼有 40 个用户。
对问题。
在我看来,我们有两种选择来解决/改善这种情况。
我们可以用比更换软件低一个数量级的成本来构建具有疯狂性能数字的 Intel i7 系统。
当最终开发出一个新系统时,它可以托管在这个盒子上,因此不会浪费硬件。一个新的 CRM 系统不断被推迟、关闭、关闭——我认为这种情况至少在一年内不会发生。
对这种情况的任何想法,特别是如果您亲自来过这里,将不胜感激。
谢谢
有什么规则或什么东西可以用来计算max_connections,default_pool_size和的好数字max_client_conn吗?
默认值是奇怪的。PostgreSQL 默认为 max_connections=100,而 pgbouncer 默认为 default_pool_size=20。default_pool_size 不应该总是高于 max_connections 吗?否则,意义何在?我认为 pgbouncer 是为了让我们通过降低开销(通过重用 PostgreSQL 的连接)来处理更多的连接。我糊涂了。
我正在寻找类似于在PostgreSQL 的 wiki 中找到的建议,比如“这个参数应该是你内存的 50%”。
我记得有一个 MySQL 电子表格可以让你计算这些类型的参数。为 PostgreSQL/pgbouncer 提供类似的东西会很棒。
postgresql linux database database-administration database-performance
我们即将推出双网络/内部事务应用程序,其中每个客户都有自己的数据库。每个数据库都非常小 - 每个不到 50MB,所以我们想知道使用 SQL Express 2008 而不是完整的 SQL Server 是否有意义。
这似乎具有跨服务器分布磁盘 I/O 的优势,同时节省大量资金(因为小型 15K 驱动器和使用的双核服务器都很便宜)。如果在某个时候我们需要太多的服务器,我们可以升级到 SQL Server ......但是现在有几十个内部用户,这似乎太贵了(特别是因为我们需要一个故障转移盒)。
考虑到我们的小型数据库,1GB 内存和单个处理器上 4 个内核的使用听起来并不太严格。我们永远不会有超过 200 个并发用户,并且大多数操作将更具事务性(这似乎有利于大量高速磁盘而不是沉重的 RAM/CPU,对吗?)
我是否错过了 SQL Server Standard 的任何优势,这些优势最初可以证明额外的 5-20K 美元投资是合理的?
我正在运行一个 PostgreSQL 数据库,它有几个存储日志信息的表。此信息仅用于报告目的,如果超过 30 天,则会转储到文件中并从数据库中删除。
可能有数百万行被删除,每次删除后我们都在运行一个 REINDEX。
这是否足够,或者我们还应该运行 VACUUM 或 VACUUM ANALYZE 吗?还是不需要 REINDEX 而我们应该只运行 VACUUM 或 VACUUM ANALYZE?
我们正在使用 PostgreSQL 8.2.3,我认为它不允许自动清空。
我将 XenServer 与多个具有本地 postgres 数据库的虚拟机一起使用。即使所有应用程序都未使用且数据库处于空闲状态,每个虚拟机也会导致持续的存储网络流量,从而降低 iSCSI 存储设备的性能。
运行后,iotop我注意到 postgres stats 收集器进程进程以大约 2 MByte/s 的速率不断写入磁盘。
然后我通过编辑禁用了统计信息的收集/etc/postgresql/8.4/main/postgresql.conf:
#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------
# - Query/Index Statistics Collector -
track_activities = off
track_counts = off
...
Run Code Online (Sandbox Code Playgroud)
正如http://www.postgresql.org/docs/8.4/static/runtime-config-statistics.htm 中所建议的。
这消除了连续写入,但是关闭统计跟踪有什么缺点吗?
或者我应该将 pg_stat_tmp 目录放在 ramdisk 上以避免磁盘/网络流量?
系统是最新的 Debian 6.0.7(squeeze),带有 postgres 8.4 和大约 20 个数据库,大约有 50 个表,总转储文件大小小于 100 MB。
postgresql performance performance-tuning database-performance
我有一台带有便宜的慢速磁盘和一个昂贵的快速磁盘的服务器。
我想将昂贵的磁盘用于所有对速度很重要的事情,例如我的数据库。
为了省钱,我想将慢速磁盘用于无论是快还是慢都没有太大区别的任何事情,例如备份。
现在,我的问题是,我应该在慢速磁盘还是快速磁盘上安装Microsoft SQL Server?
(要清楚,无论如何我都会将我的数据库放在快速磁盘上,所以我的问题只与安装本身的位置有关)
我们有一个 Web 应用程序,其架构要求任何注册用户(实际上是一家公司)都应该彼此隔离,即,我将使用相同的数据模型运行相同的 Web 应用程序,但为每个客户使用不同的数据集。
所以,我们确实考虑过在 Postgres 中为每个客户创建一个不同的数据库。这个解决方案可以扩展到 10-20K 的数据库吗?多好?
有没有人对此有更好的解决方案?
提前致谢。
我的 MYSQL 服务器与 Cpanel 一起安装时遇到了一些问题。即使我在网络上没有太多流量,我的服务器也显示 100% 的 mysql 使用率。
我正在运行带有 80GB SSD 和 8GB RAM 的 CentOS 6.5x64 和 4CPU 内核。
我的.cnf:
[mysqld]
max_connections=500
key_buffer=128M
myisam_sort_buffer_size=35M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=4000
thread_cache_size=286
interactive_timeout=25
wait_timeout=7000
connect_timeout=10
max_allowed_packet=268435456
max_connect_errors=10
query_cache_limit=2M
query_cache_size=256M
query_cache_type=1
tmp_table_size=16M
innodb_buffer_pool_size=134217728
open_files_limit=10000
[mysqld_safe]
[mysqldump]
quick
max_allowed_packet=16M
[myisamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M
Run Code Online (Sandbox Code Playgroud)
这是 MySQLTuner 的输出:
-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[--] Data in MyISAM tables: 164M (Tables: 88)
[--] Data in InnoDB tables: …Run Code Online (Sandbox Code Playgroud) 我有一个包含大约 200 万行交易数据的表,用于分析。每周我们都会用新数据重新加载它,因此我们一直使用 TRUNCATE 将其清除,然后插入新行。
表上有几个索引。如果我不删除并重新创建索引,我是否需要在每次截断和重新填充后重新编制索引,还是没有必要?我应该在 TRUNCATE 之后运行 VACUUM 还是这也是不必要的?
postgresql ×5
sql-server ×3
database ×2
mysql ×2
performance ×2
hardware ×1
linux ×1
sql ×1
unicode ×1
utf-8 ×1
vacuum ×1