询问建议?

一个低调的码农 2018-01-27 11:03:46
目前客户使用的是sqlserver2008R2的数据库,数据文件已经增长到100G大小,如何做能够提高查询数据的效率?只能通过提升硬件性能吗?
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-01-27
  • 打赏
  • 举报
回复
100G都需要查询吗?可以把数据分一分,把常用的分到一起,不怎么用的备份起来
  • 打赏
  • 举报
回复
谢谢我已经知道是那些查询语句造成的时间过长了。谢谢!!
  • 打赏
  • 举报
回复
服务器为IBM X3650 cpu为E5,内存16G,硬盘是SAS600G*2做raid1.
吉普赛的歌 2018-01-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_30108077 的回复:
服务器为IBM X3650 cpu为E5,内存16G,硬盘是SAS600G*2做raid1.
#4 中查到的慢SQL 你可以贴出来, 具体再优化
吉普赛的歌 2018-01-27
  • 打赏
  • 举报
回复
先在服务器上执行一下, 最近有哪些执行缓慢的SQL, 具体情况具体分析。
SELECT TOP 10 OBJECT_NAME(qt.objectid, qt.dbId)  AS procName,
       DB_NAME(qt.dbId)                   AS [db_name],
       qt.text                            AS SQL_Full,
       SUBSTRING(
           qt.text,
           (qs.statement_start_offset / 2) + 1,
           (
               (
                   CASE statement_end_offset
                        WHEN -1 THEN DATALENGTH(qt.text)
                        ELSE qs.statement_end_offset
                   END 
                   - qs.statement_start_offset
               ) / 2
           ) + 1
       )                                  AS SQL_Part --统计对应的部分语句
       ,
       qs.creation_time,
       qs.last_execution_time,
       qs.execution_count,
       qs.last_elapsed_time / 1000000     AS lastElapsedSeconds,
       qs.last_worker_time / 1000000      AS lastCpuSeconds,
       CAST(
           qs.total_elapsed_time / 1000000.0 / (
               CASE 
                    WHEN qs.execution_count = 0 THEN -1
                    ELSE qs.execution_count
               END
           ) AS DECIMAL(28, 2)
       )                                  AS avgDurationSeconds,
       CAST(qs.last_logical_reads AS BIGINT) * 1.0 / (1024 * 1024) * 8060 AS 
       lastLogicReadsMB,
       qs.last_logical_reads,
       qs.plan_handle
FROM   sys.dm_exec_query_stats qs
       CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS p
WHERE  qs.last_execution_time >= CONVERT(CHAR(10),GETDATE(),120)+' 08:00'	--今天8点之后的慢SQL
       AND qs.last_elapsed_time >= 3 * 1000 * 1000							--只取执行时间大于 3 秒的记录
       AND qt.[text] NOT LIKE '%Proc_DBA%'
ORDER BY
       qs.last_worker_time DESC
另外, CPU, 内存, 硬盘IO 的实际情况也说一下
OwenZeng_DBA 2018-01-27
  • 打赏
  • 举报
回复
100g不算大,我们的客户很多上t的。把数据库设计,和优化做好就行。如果某个表实在太大也可以考虑分区表和历史数据分离。
  • 打赏
  • 举报
回复
数据库的数据需要很多跨表,然后根据时间的跨度来进行联合查询,又是甚至可以查一年内的所有销售数据。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧