发布于 2017-04-29 17:53:18
1楼
就我的分析来看,这是WinCC的数据库管理问题了。
想想,WinCC存上亿个数据后,开、关软件都卡半天,超级无语,砸电脑的冲动都有了。再看看人家的大型网站同样存几十亿数据人家多用户访问也没见得卡个半死。。。
有人会说,用SSD啊....那么我也说用SSD更恶心,存一年数据后,直接卡到“没响应”,非得重启系统,然后SSD都快寿终了。。。
从多方面分析得出的结论,现在绝大多数的软件都是C++编写编译的多线程程序,然后写硬盘文件时都是多线程的。当多个文件同时写时,就会造成每个文件保存在硬盘的多个地方造成文件碎片大量的产生。文件碎片多了,当要读取文件时就会在非常多的碎片中一次次的读取,造成读取文件的时间远远超过正常的理论时间,所以在WinCC启动加载变量存档时直接卡在数据库读取数据过程中,直到读取完所有的索引才继续启动....
所以,WinCC这货又不像Access那要可以通过整理压缩数据库来优化访问速度,所以无解。
还有就是Windows系统的定期碎片整理、虚拟内存、Superfetch服务这两个恶心的玩意也是专门跟用户作对的,当数据库定时存储数据时依然会整理碎片,也是整理碎片就2^N的倍数增长,,工控机可是365x24h开机的,必须关闭定期碎片整理计划任务。至于虚拟内存、Superfetch,这两货就是个逗逼,一个不停的读取文件到硬盘缓存导致本来就慢的变得更慢碎片更多,一个不停的读取文件到内存搞得内存碎片一坨一坨的SQL申请大内存时直接pass又申请又pass....所以,必须禁用虚拟内存、禁用Superfetch服务。
再有就是,可以定期关掉WinCC后,用Defraggler软件整理硬盘文件碎片吧。
以上的做法只能缓解一点点作用,只要WinCC不用心去优化是无法最终解决的吧。