我踩過的聽過的那些坑

2021-07-25 22:35:39 字數 3291 閱讀 4057

題目是黃釗吉大牛出的, 答案的自己寫的。

1.sql server 最小儲存單元是什麼?多大?再上一層儲存單元是什麼?多大?

答:sql server最小的儲存單位是頁(page),乙個頁的大小是8k=8192位元組。頁頭的大小是固定的96個位元組,所以剩下8192-96=8096個位元組用於儲存資料行和行偏移矩陣。再上一層的儲存單元是:區。區是管理空間的基本單位。乙個區是八個物理上連續的頁(即 64 kb)。

2.堆表和非堆表的本質區別?

堆表無序,非堆表有序(有聚集索引)。

3.sql server目前有多少種高可用技術?分別是什麼?

映象、複製訂閱、快照、日誌分發、故障轉移集群、alwasyon。

4.sql server有多少種索引?盡可能列出來。

聚集索引、非聚集索引、唯一索引、包含索引、過濾索引、列聚集索引。

5.sql server有多少個系統庫?

master, model, msdb, tempdb, resource

6.如果乙個報表儲存過程很慢,你的思路是什麼?

--1. 先標記時間, 查出**慢, 是否有堵塞;

--2. 用工具測試看下伺服器的io是否正常;

--3. 對於複雜的多表查詢, 改為分步驟查詢, 中間用臨時表快取資料;

--4. 觀察執行計畫,看是否需要新增索引。

7.圖形化執行計畫閱讀順序?

從右到左, 從下到上

8.怎麼在ssms中得知某個sql語句的物理讀、邏輯讀次數?

set statistics io on

9.profiler/sql trace和extent event相比,在過濾資料的行為上有什麼不同?

擴充套件事件更高效,對伺服器影響較小。

10.有下面乙個表:

create table t(id int identity(1,1),aqty int,bqty int)

大概資料如下:

1 1 2

2 2 3

3 2 1

4 3 5

....

假設資料有幾百萬,現在有個語句很慢:

select id

from t

where aqty>bqty

列上已經有索引,你能想到root cause是什麼?你會怎麼優化?

兩個列進行比較, 原來的索引起不了作用。

優化:增加計算列,並在計算列上加索引。

alter table t add compare  as case when aqty>bqty then 1 when aqty=bqty then 0 else -1 end

11.你覺得為什麼跨伺服器多表關聯查詢時「可能」效能很差?你能想到哪些可以提公升跨伺服器查詢時效能低下的方法?

一是網路傳輸影響, 二是執行計畫不準確。

優化:不大的表, 先傳過來再進行查詢。或者只取需要的資料傳過來再查詢。

12.如何清空有外來鍵的表的資料?

先禁用外來鍵依賴,再truncate table

13.ldf暴增怎麼辦?你先查哪個dmv?

先備份、收縮日誌。sys.dm_db_log_space_usage

14.如果某個job的所有者是sa,能不能禁用sa?

可以。 這一步在 sqlserver2014上親自試驗過了。

15.ssms修改乙個表的一列的資料型別 ,與用t-sql實現alter table 的底層實現區別在哪? 

ssms在圖形介面直接修改列型別, 會重新建立表再將資料插入, 而語句則不會。

16.union 和union all從效能上的區別是什麼?

union 有去重的消耗, 而 union all 沒有。

17.初始安裝sql server 2008及其以上版本時,sql server預設是什麼啟動賬號?

network service

18.不在域中的兩台伺服器做資料庫映象,與在域環境相比,必不可少的乙個操作是什麼?

設定host檔案。

19.事務複製對錶最起碼有哪個硬性要求?

表必須有主鍵!

20.你能不能猜到什麼結果?為什麼?

declare @demo varchar

set @demo = '你猜猜會怎樣?'

select @demo

一片空白, 因為 varchar 不指定長度, 預設長度為1個位元組

21. 怎麼優化這段**?

use adventureworks2014  --adventureworks均可不一定是2014

godeclare @date date = '2013-09-30'

select salesorderid,

salesorderdetailid,

modifieddate

from sales.salesorderdetail

where convert(varchar(20), modifieddate, 23) = convert(varchar(20), @date, 23)

不應該在where 左邊使用表示式。改為:where modifieddate= convert(datetime, @date)

22.十萬左右的資料要作為臨時資料,你用臨時表還是表變數?大概說說理由。

用臨時表, 而不是表變數。因為臨時表可以用索引, 可以使用統計資訊來優化。

入職後大概工作:

1. 完成大概5~8份文件,所以你需要有一定的文件編寫水平。

2. 協助我完成資料庫源**管控任務。

3. 逐步接手目前為止8臺伺服器大概60個資料庫,目前只用了事務複製(這個最重要,因為我今年7月要休陪產假,你接不起常規管理到時就搞死我)

常規管理包含但可能不僅限於:

1. 備份還原

2. 處理複製問題(不會的找x東大牛)

3. 初中級t-sql優化

4. 資料庫日常監控

4. 一年之內逐步讀完這些書,不好意思,我沒有中文版,也不會翻譯好然後給你讀

《training kit (exam 70-461)》

《training kit (exam 70-462)》

《microsoft sql server 2008 internals》

《microsoft_sql_server_2012_security_cookbook》

《syngress.securing.sql.server.feb.2011》

《troubleshooting performance problems in sql server 2008》

5. 協助我實現sql server運維自動化,但是目前我還沒有想法,只知道要做。

6. 能滿足的以後還有機會做你想做的事情。

那些天我踩過的坑

使用knockoutjs時候,千萬不要在迴圈繫結中把dom元素的id寫死。例如在 input file 中 banging event change 時,千萬不要在ko.observablearray 中固定id屬性。如下所示 label for up img class am btn am btn...

那些年我踩過的坑(持續更新)

今天突然想到可以把開發中遇到過的問題記錄下來,以防日後再犯 python中新式類和舊式類在多繼承的時候,查詢要呼叫的方法 從左到右 新式類是廣度優先的查詢演算法。舊式類的查詢方法是深度優先的。type是元類,是建立類物件的類 使用mongoengine定義個field為primary key時,mo...

微信群發,那些我踩過的坑

開發環境 框架使用tp3.2.3,php版本 5.6 1.獲取access token 建議這個函式寫在公共方法或其他公共類中,方便呼叫 function getaccesstoken s access token result access token result expires in retu...