You can also manage the configuration values for iejoanraniaiknu and i]toanran iaiknu by using the ol[_kjbecqnaÍÊÞÊÌiÍÊÌĂi`Í«ĂVi`ÕĂi°Í/ÍÊiiÍÌ iÍVv}ÕĂ>ÌÍÛ>ÕiÊÍvĂÍ Ì iÊiÍ«>Ă>i
Trang 1Dynamic Management Views
/Í}iÌÍ> immediate snapshot of a large amount of data that was formerly available only
Í*iĂvĂ>ViÍÌĂ]Í-+Í-iẶiĂÍÜÍvviĂÊÍÌ iÍÊ>iÍ`>Ì>ÍÌiĂ>ÞÍÌ ĂÕ} Í>ÍÊiÌ of
`Þ>VÍ>>}iiÌÍÛiÜÊÍ6Ê®Í>`Í`Þ>VÍ>>}iiÌÍvÕVÌÊÍÊ®°Í/ iÊiÍ>ĂiÍ
iÝÌĂiiÞÍÕÊivÕÍiV >ÊÊÍvĂÍV>«ÌÕĂ}Í>ÍÊ>«Ê ÌÍvÍÌ iÍVÕĂĂiÌÍ«iĂvĂ>ViÍvÍÞÕĂÍ
ÊÞÊÌi°Í½ÍÌĂ`ÕViÍÊiÛiĂ>ÍvÍÌ iÊiÍÌ ĂÕ} ÕÌÍÌ iÍL]ÍLÕÌͽÍvVÕÊÍÍ>ÍviÜÍÌ >ÌÍ>ĂiÍÌ iÍ
most important for monitoring performance and for establishing a baseline
/ iÍouo*`i[ko[lanbkni]j_a[_kqjpano view displaysÍÌ iÍ-+Í-iẶiĂÍVÕÌiĂÊÍÜÌ Í>Í
µÕiĂÞ]Í>Ü}ÍÞÕÍÌÍ>««ÞÍÌ iÍvÕÍÊÌĂi}Ì ÍvÍ/-+ÍÌÍÌ iÍ`>Ì>Íi`>ÌiÞ°ÍĂÍiÝ>«i]Í
this simple query will return the current value for Hkcejo+oa_:
OAHA?P_jpn[r]hqa
BNKIouo*`i[ko[lanbkni]j_a[_kqjpano
SDANAK>FA?P[J=IA9#IOOMH CB.,,46Cajan]hOp]peope_o#
=J@_kqjpan[j]ia9#Hkcejo+oa_#
/ ÊÍĂiÌÕĂÊÍÌ iÍÛ>ÕiÍvÍ£xÍvĂÍÞÍÊiẶiðÍĂÍÞÕĂÍÊiẶiĂ]ÍÞÕ½Íii`ÍÌÍÊÕLÊÌÌÕÌiÍÌ iÍ
appropriate server name in the K>FA?P[J=IA comparison
/ iĂiÍ>ĂiÍ>Í>Ă}iÍÕLiĂÍvÍ6ÊÍ>`ÍÊÍÌ >ÌÍV>ÍLiÍÕÊi`ÍÌÍ}>Ì iĂÍvĂ>ÌÍ
about the server Rather than cover them all, I’ll introduce one more that you will find yourself
accessing on a regular basis, ouo*`i[ko[s]ep[op]po°Í/ ÊÍ6ÍÊ ÜÊÍ>Í>}}Ăi}>Ìi`ÍÛiÜÍvÍ
Ì iÍÌ Ăi>`ÊÍÜÌ Í-+Í-iẶiĂÍÌ >ÌÍ>ĂiÍÜ>Ì}ÍÍÛ>ĂÕÊÍĂiÊÕĂViÊ]ÍViVÌi`ÍÊViÍÌ iÍ>ÊÌÍ
ÌiÍ-+Í-iẶiĂÍÜ>ÊÍÊÌ>ĂÌi`ÍĂÍÌ iÍVÕÌiĂÊÍÜiĂiÍĂiÊḭÍ`iÌvÞ}ÍÌ iÍÌÞ«iÊÍvÍÜ>ÌÊÍÌ >ÌÍ>ĂiÍ
occurring within your system is one of the easiest mechanisms to begin identifying the source
vÍÞÕĂÍLÌÌiiVʰÍ9ÕÍV>ÍÊĂÌÍÌ iÍ`>Ì>ÍÍÛ>ĂÕÊÍÜ>ÞÊ]ÍLÕÌÍvĂÍÌ iÍvĂÊÌÍiÝ>«i]ͽÍÍ>ÌÍ
the waits that have the longest current count using this simple query:
OAHA?PPKL$-,%
&
BNKIouo*`i[ko[s]ep[op]po
KN@AN>Us]ep[peia[io@AO?
}ÕĂiÍÓÓÍ`Ê«>ÞÊÍÌ iÍÕÌ«Õ̰
Figure 2-2 Output from ouo*`i[ko[s]ep[op]po
You can see not only the cumulative time that particular waits have occurred but also
>ÍVÕÌÍvÍ ÜÍvÌiÍÌ iÞÍ >ÛiÍVVÕĂĂi`Í>`ÍÌ iÍ>ÝÕÍÌiÍÌ >ÌÍÊiÌ }Í >`ÍÌÍ
Ü>̰ÍĂÍ iĂi]ÍÞÕÍV>Í`iÌvÞÍÌ iÍÜ>ÌÍÌÞ«iÍ>`ÍLi}ÍÌĂÕLiÊ Ì}°Í"iÍvÍÌ iÍÊÌÍ
Trang 2VÍÌÞ«iÊÍvÍÜ>ÌÊÍÊÍĨ"°ÍvÍÞÕÍÊiiÍ=OUJ?D[EK[?KILHAPEKJ, EK[?KILHAPEKJ, HKCICN, SNEPAHKC, or L=CAEKH=P?D in your top tenÍÜ>ÌÍÌÞ«iÊ]ÍÞÕÍ>ÞÍLiÍiÝ«iĂiV}ÍĨ"ÍVÌiÌ]Í
>`ÍÞÕÍÜÍÜÍÜ iĂiÍÌÍÊÌ>ĂÌÍÜĂ}°ÍĂÍ>ÍĂiÍ`iÌ>i`Í>>ÞÊÊÍvÍÜ>ÌÍÌÞ«iÊÍ>`Í ÜÍ ÌÍÕÊiÍÌ iÍ>ÊÍ>ÍÌĂ}ÍÌÍÜÌ Í-+Í-iẶiĂ]ÍĂi>`ÍÌ iÍVĂÊvÌÍÜ ÌiÍ«>«iĂͺ-+Í -iẶiĂÍÓôôxÍ7>ÌÊÍ>`Í+ÕiÕiÊ»Ídppl6++sss*ie_nkokbp*_ki+pa_djap+lnk`pa_djkh+omh+
^aopln]_pe_a+lanbkni]j_a[pqjejc[s]epo[mqaqao*iolt®°ÍÌ Õ} ÍÌÍÜ>ÊÍÜĂÌÌiÍvĂÍ-+Í -iẶiĂÍÓôôx]ÍÌÍÊÍiµÕ>ÞÍ>««V>LiÍÌÍ-+Í-iẶiĂÍÓôôn°
Hardware Resource Bottlenecks
/Þ«V>Þ]Í-+Í-iẶiĂÍ`>Ì>L>Êi performance is affected by stress on the following hardware resources:
Í UÍ ÊÍĨ"
Í UÍ *ĂViÊÊĂ
Í UÍ iÌÜĂ
-ÌĂiÊÊÍLiÞ`ÍÌ iÍV>«>VÌÞÍvÍ>Í >Ă`Ü>ĂiÍĂiÊÕĂViÍvĂÊÍ>ÍLÌÌiiV°Í/Í>``ĂiÊÊÍÌ iÍ
ÛiĂ>Í«iĂvĂ>ViÍvÍ>ÍÊÞÊÌi]ÍÞÕÍii`ÍÌÍ`iÌvÞÍÌ iÊiÍLÌÌiiVÊ]ÍLiV>ÕÊiÍÌ iÞÍvĂÍÌ iÍ limit on overall system performance
Identifying Bottlenecks
/ iĂiÍÊÍÕÊÕ>ÞÍ>ÍĂi>ÌÊ «ÍLiÌÜiiÍĂiÊÕĂViÍLÌÌiiVʰÍĂÍiÝ>«i]Í>Í«ĂViÊÊĂÍ LÌÌiiVÍ>ÞÍLiÍ>ÍÊÞ«ÌÍvÍiÝViÊÊÛiÍ«>}}ÍiĂÞÍLÌÌiiV®ÍĂÍ>ÍÊÜÍ`ÊÍ`ÊÍ LÌÌiiV®°ÍvÍ>ÍÊÞÊÌiÍÊÍÜÍÍiĂÞ]ÍV>ÕÊ}ÍiÝViÊÊÛiÍ«>}}]Í>`Í >ÊÍ>ÍÊÜÍ`Ê]ÍÌ iÍ
iÍvÍÌ iÍi`ÍĂiÊÕÌÊÍÜÍLiÍ>Í«ĂViÊÊĂÍÜÌ Í } ÍÕÌđ>ÌÍÊViÍÌ iÍ«ĂViÊÊĂÍ >ÊÍÌÍÊ«i`Í
Ì iÍĂiÊÕÌ>ÌÍ } ÍÕLiĂÍvÍĨ"ÍĂiµÕiÊÌʰÍ,i«>V}ÍÌ iÍ«ĂViÊÊĂÍÜÌ Í>Ív>ÊÌiĂÍiÍ>ÞÍ i«Í
>ÍÌÌi]ÍLÕÌÍÌÍÜÕ`ÍÌÍLiÍÌ iÍLiÊÌÍÛiĂ>ÍÊÕ̰ÍÍ>ÍV>ÊiÍiÍÌ Ê]ÍVĂi>Ê}ÍiĂÞÍÊÍ>Í
ĂiÍ>««Ă«Ă>ÌiÍÊÕÌ]ÍLiV>ÕÊiÍÌÍÜÍ`iVĂi>ÊiÍ«ĂiÊÊÕĂiÍÍÌ iÍ`ÊÍ>`Í«ĂViÊÊĂÍ>ÊÍÜi°Í
N Note The most common performance problem is usually I/O, either from memory or from the disk
"iÍvÍÌ iÍLiÊÌÍÜ>ÞÊÍvÍV>Ì}Í>ÍLÌÌiiVÍÊÍÌÍ`iÌvÞÍĂiÊÕĂViÊÍÌ >ÌÍ>ĂiÍÜ>Ì}ÍvĂÍ some other resource to complete its operation You can use Performance Monitor counters
ĂÍ6ÊÍÊÕV Í>ÊÍouo*`i[ko[s]ep[op]poÍÌÍ}>Ì iĂÍÌ >ÌÍvĂ>̰Í/ iÍĂiÊ«ÊiÍÌiÍvÍ>Í request served by a resource includes the time the request had to wait in the resource queue,
>ÊÍÜiÍ>ÊÍÌ iÍÌiÍÌ>iÍÌÍiÝiVÕÌiÍÌ iÍĂiµÕiÊÌ]ÍÊÍi`ÍÕÊiĂÍĂiÊ«ÊiÍÌiÍÊÍ`ĂiVÌÞͫëĂ-tional to the amount of queuing in a system
Trang 3`ÊÍÊÕLÊÞÊÌiÍ>Ăi>`ÞÍ >ÊÍ«i`}Í`ÊÍĂiµÕiÊÌÊÍÍÌ]Í>ÍiÜÍ`ÊÍĂiµÕiÊÌÍ >ÊÍÌÍÜ>ÌÍÕÌÍÌ iÍ
«ĂiÛÕÊÍ`ÊÍĂiµÕiÊÌÊÍV«iÌi°ÍvÍÌ iÍÌiÍÌ>iÍLÞÍ>Í>ÛiĂ>}iÍ`ÊÍÌĂ>ÊviĂÍÊÍiÍÊiV`]Í
Ì iÍÌ iÍiÜÍ`ÊÍĂiµÕiÊÌÍ >ÊÍÌÍÜ>ÌÍvĂÍ>LÕÌÍÌiÍÊiV`ÊÍLivĂiÍ}iÌÌ}ÍÌ iÍ>ÌÌiÌÍvÍÌ iÍ
`ÊÍÊÕLÊÞÊÌi°Í/ iĂivĂi]ÍÌ iÍÌÌ>ÍĂiÊ«ÊiÍÌiÍvÍÌ iÍ`ÊÍĂiµÕiÊÌÍÜÍLiÍÌiÍÊiV`ÊÍÜ>ÌÍ
Ìi]Í«ÕÊÍiÍÊiV`Í`ÊÍÌĂ>ÊviĂÍÌi°
iÍ>Ü>ĂiÍÌ >ÌÍÌ iÍ>LÊiViÍvÍ>͵ÕiÕiÍ`iÊÍÌÍi>ÍÌ >ÌÍÌ iĂiÍÊÍÍLÌÌiiV°Í7 iÍ
µÕiÕiÍi}Ì ÊÍÊÌ>ĂÌÍ}ĂÜ}]Í ÜiÛiĂ]ÍÌÍÊÍ>ÍÊÕĂiÍÊ}ÍÌ >ÌÍÌ iÍÊÞÊÌiÍÊÍÌÍ>LiÍÌÍii«ÍÕ«Í
with the demand
ÌÍ>ÍĂiÊÕĂViÊÍ >ÛiÍÊ«iVvVÍVÕÌiĂÊÍÌ >ÌÍÊ Ü͵ÕiÕ}ÍiÛiÊ]ÍLÕÌÍÊÌÍĂiÊÕĂViÊÍ
>ÛiÍÊiÍVÕÌiĂÊÍÌ >ÌÍĂi«ĂiÊiÌÍ>ÍÛiĂVÌÌ>ÍvÍÌ >ÌÍĂiÊÕĂVi°ÍĂÍiÝ>«i]ÍiĂÞÍ
has no such counter, but a large number of hard page faults represents the overcommittal of
« ÞÊV>ÍiĂÞÍ >Ă`Í«>}iÍv>ÕÌÊÍ>ĂiÍiÝ«>i`Í>ÌiĂÍÍÌ iÍV >«ÌiĂÍÍÌ iÍÊiVÌͺ*>}iÊĨÊiVÍ VÕÌiĂÊÍÌÍ`V>ÌiÍÌ iÍiÛiÍv͵ÕiÕ}°ÍĂÍiÝ>«i]ÍÌ i counter L]caHebaAtla_p]j_u
`V>ÌiÊÍ ÜÍ}Í>Í«>}iÍÜÍÊÌ>ÞÍÍÌ iÍLÕvviĂÍ«ÍÜÌ ÕÌÍLi}ÍĂiviĂiVi`°Í/ ÊÍÊÍ>Í
`V>ÌĂÍvÍ ÜÍÜiÍ-+Í-iẶiĂÍÊÍ>LiÍÌÍ>>}iÍÌÊÍiĂÞ]ÍÊViÍ>Í}iĂÍviÍi>ÊÍÌ >ÌÍ
>Í«iViÍvÍ`>Ì>ÍÍÌ iÍLÕvviĂÍÜÍLiÍÌ iĂi]Í>Û>>Li]ÍÜ>Ì}ÍvĂÍÌ iÍiÝÌÍĂiviĂiVi°ÍÜiÛiĂ]Í
>ÍÊ ĂÌiĂÍviÍi>ÊÍÌ >ÌÍ-+Í-iẶiĂÍÊÍÛ}Í«>}iÊÍÍ>`ÍÕÌÍvÍÌ iÍLÕvviĂ͵ÕVÞ]Í«ÊÊLÞÍ
ÊÕ}}iÊÌ}Í>ÍiĂÞÍLÌÌiiV°
You will see which counters to use inÍ>>Þđ}Íi>V ÍÌÞ«iÍvÍLÌÌiiVÍÊ ĂÌÞ°
Bottleneck Resolution
"ViÍÞÕÍ >ÛiÍ`iÌvi`ÍLÌÌiiVÊ]ÍÞÕÍV>ÍĂiÊÛiÍÌ iÍÍÌÜÍÜ>ÞÊ\
Í UÍ 9ÕÍV>ÍVĂi>ÊiÍĂiÊÕĂViÍÌ ĂÕ} «Õ̰
Í UÍ 9ÕÍV>Í`iVĂi>ÊiÍÌ iÍ>ĂĂÛ>ÍĂ>ÌiÍvÍĂiµÕiÊÌÊÍÌÍÌ iÍĂiÊÕĂVi°
VĂi>Ê}ÍÌ iÍÌ ĂÕ} «ÕÌÍÕÊÕ>ÞÍĂiµÕĂiÊÍiÝÌĂ>ÍĂiÊÕĂViÊÍÊÕV Í>ÊÍiĂÞ]Í`ÊÊ]Í«Ă-ViÊÊĂÊ]ÍĂÍiÌÜĂÍ>`>«ÌiĂʰÍ9ÕÍV>Í`iVĂi>ÊiÍÌ iÍ>ĂĂÛ>ÍĂ>ÌiÍLÞÍLi}ÍĂiÍÊiiVÌÛiÍ>LÕÌÍ
Ì iÍĂiµÕiÊÌÊÍÌÍ>ÍĂiÊÕĂVi°ÍĂÍiÝ>«i]ÍÜ iÍÞÕÍ >ÛiÍ>Í`ÊÍÊÕLÊÞÊÌiÍLÌÌiiV]ÍÞÕÍV>Í
iÌ iĂÍVĂi>ÊiÍÌ iÍÌ ĂÕ} «ÕÌÍvÍÌ iÍ`ÊÍÊÕLÊÞÊÌiÍĂÍ`iVĂi>ÊiÍÌ iÍ>ÕÌÍvÍĨ"ÍĂiµÕiÊÌʰ
VĂi>Ê}ÍÌ iÍÌ ĂÕ} «ÕÌÍi>ÊÍ>``}ÍĂiÍ`ÊÊÍĂÍÕ«}Ă>`}ÍÌÍv>ÊÌiĂÍ`ÊʰÍiVĂi>Ê-}ÍÌ iÍ>ĂĂÛ>ÍĂ>ÌiÍi>ÊÍ`iÌvÞ}ÍÌ iÍV>ÕÊiÍvÍ } ÍĨ"ÍĂiµÕiÊÌÊÍÌÍÌ iÍ`ÊÍÊÕLÊÞÊÌiÍ>`Í
>««Þ}ÍĂiÊÕÌÊÍÌÍ`iVĂi>ÊiÍÌ iĂÍÕLiðÍ9ÕÍ>ÞÍLiÍ>LiÍÌÍ`iVĂi>ÊiÍÌ iÍĨ"ÍĂiµÕiÊÌÊ]Í
vĂÍiÝ>«i]ÍLÞÍ>``}Í>««Ă«Ă>ÌiÍ`iÝiÊÍÍ>ÍÌ>LiÍÌÍÌÍÌ iÍ>ÕÌÍvÍ`>Ì>Í>VViÊÊi`ÍĂÍ
by partitioning a tableÍLiÌÜiiÍÕÌ«iÍ`Êʰ
Memory Bottleneck Analysis
Memory can be aÍ«ĂLi>ÌVÍLÌÌiiVÍLiV>ÕÊiÍ>ÍLÌÌiiVÍÍiĂÞÍÜÍ>viÊÌÍÍ
Ì iĂÍĂiÊÕĂViÊ]Ḭ́Í/ ÊÍÊÍ«>ĂÌVÕ>ĂÞÍÌẮiÍvĂÍ>ÍÊÞÊÌiÍẮ}Í-+Í-iẶiðÍ7 iÍ-+Í
-iẶiĂÍẮÊÍÕÌÍvÍV>V iÍĂÍiĂÞ®]Í>Í«ĂViÊÊÍÜÌ Í-+Í-iẶiĂÍV>i`Ílazy writer®Í >Ê
ÌÍÜĂÍiÝÌiÊÛiÞÍÌÍ>Ì>ÍiÕ} ÍvĂiiÍÌiĂ>ÍiĂÞÍ«>}iÊÍÜÌ Í-+Í-iẶiðÍ/ ÊÍ
L>VÍÌÍ`ʰ
Trang 4SQL Server Memory Management
-+Í-iẶiĂÍ>>}iÊ memory for databases, including memory requirements for data and
µÕiĂÞÍiÝiVÕÌÍ«>Ê]ÍÍ>Í>Ă}iÍ«ÍvÍiĂÞÍV>i`ÍÌ iÍmemory pool°Í/ iÍiĂÞÍ«Í
consists of a collection of 8KB buffers to manage data pages and plan cache pages, free pages,
>`ÍÊÍvĂÌ °Í/ iÍiĂÞÍ«ÍÊÍÕÊÕ>ÞÍÌ iÍ>Ă}iÊÌÍ«ĂÌÍvÍ-+Í-iẶiĂÍiĂÞ°Í-+Í -iẶiĂÍ>>}iÊÍiĂÞÍLÞÍ}ĂÜ}ÍĂÍÊ Ă}ÍÌÊÍiĂÞÍ«ÍÊđiÍ`Þ>V>Þ°
You
canÍVv}ÕĂiÍ-+Í-iẶiĂÍvĂÍ`Þ>VÍiĂÞÍ>>}iiÌÍÍ-+Í-iẶiĂÍ>>}i-iÌÍ-ÌÕ`Í -®°ÍÍÌÍÌ iÍiĂÞÍv`iĂÍvÍÌ iÍ-iẶiĂÍ*Ă«iĂÌiÊÍ`>}ÍLÝ]Í>ÊÍÊ ÜÍÍ
}ÕĂiÍÓΰ
Figure 2-3 SQL Server memory configuration
/ iÍ`Þ>VÍiĂÞÍĂ>}iÍÊÍVÌĂi`ÍÌ ĂÕ} ÍÌÜÍVv}ÕĂ>ÌͫëiĂÌiÊ\Í
Iejeiqi$I>% and I]teiqi$I>%
Trang 5Í UÍ Iejeiqi$I>%]Í>ÊÍÜÍ>ÊÍiejoanraniaiknu]ÍÜĂÊÍ>ÊÍ>ÍvĂÍÛ>ÕiÍvĂÍÌ iÍiĂÞÍ
«°Í"ViÍÌ iÍiĂÞÍ«ÍĂi>V iÊÍÌ iÍÊ>iÍÊđiÍ>ÊÍÌ iÍvĂÍÛ>Õi]Í-+Í-iẶiĂÍV>Í
VÌÕiÍVÌÌ}Í«>}iÊÍÍÌ iÍiĂÞÍ«]ÍLÕÌÍÌÍV>ÌÍLiÍÊ ẮÍÌÍiÊÊÍÌ >Í
Ì iÍvĂÍÛ>Õi°Í ÌiÍÌ >ÌÍ-+Í-iẶiĂÍ`iÊÍÌÍÊÌ>ĂÌÍÜÌ ÍÌ iÍiejoanraniaiknu
con-figuration value but commits memory dynamically, as needed
Í UÍ I]teiqi$I>%]Í>ÊÍÜÍ>Ê i]toanraniaiknu, serves as a ceiling value to limit the
>ÝÕÍ}ĂÜÌ ÍvÍÌ iÍiĂÞÍ«°Í/ iÊiÍVv}ÕĂ>ÌÍÊiÌÌ}ÊÍÌ>iÍivviVÌÍi-diately and do not require a restart
VĂÊvÌÍĂiVi`ÊÍÌ >ÌÍÞÕÍÕÊiÍ`Þ>VÍiĂÞÍVv}ÕĂ>ÌÍvĂÍ-+Í-iẶiĂ]Í
where iejoanraniaiknu will be 0 and i]toanraniaiknuÍÜÍLiÍÌ iÍ>ÝÕÍ« ÞÊV>Í
memory of the system, assuming a single instance on the machine You should not run other
iĂÞÌiÊÛiÍ>««V>ÌÊÍÍÌ iÍÊ>iÍÊiẶiĂÍ>ÊÍ-+Í-iẶiĂ]ÍLÕÌÍvÍÞÕÍÕÊÌ]ÍÍĂiV-mend you first get estimates on how much memory is needed by other applications and then
Vv}ÕĂiÍ-+Í-iẶiĂÍÜÌ Í>Íi]toanraniaiknu value set to prevent the other applications
vĂÍÊÌ>Ặ}Í-+Í-iẶiĂÍvÍiĂÞ°Í"Í>ÍÊÞÊÌiÍÜ iĂiÍ-+Í-iẶiĂÍÊÍẮ}ÍÍÌÊÍÜ]ÍÍ
«ĂiviĂÍÌÍÊiÌÍÌ iÍÕÍÊiẶiĂÍiĂÞÍiµÕ>ÍÌÍÌ iÍ>ÝÍÛ>ÕiÍ>`ÍÊ«ÞÍ`Ê«>ÌV ÍÜÌ Í
`Þ>VÍ>>}iḭÍ"Í>ÍÊiẶiĂÍÜÌ ÍÕÌ«iÍ-+Í-iẶiĂÍÊÌ>ViÊ]ÍÞÕ½Íii`ÍÌÍ>`ÕÊÌÍ
Ì iÊiÍiĂÞÍÊiÌÌ}ÊÍÌÍiÊÕĂiÍi>V ÍÊÌ>ViÍ >ÊÍ>Í>`iµÕ>ÌiÍÛ>Õi°ÍÕÊÌÍ>iÍÊÕĂiÍÞÕ½ÛiÍ
ivÌÍiÕ} ÍiĂÞÍvĂÍÌ iÍ«iĂ>Ì}ÍÊÞÊÌiÍ>`ÍiÝÌiĂ>Í«ĂViÊÊiÊ]Í>ÊÍÜiÍ>ÊÍLÕvviĂ
pool memory (which used to be called IaiPkHa]ra®°
iĂÞÍÜÌ Í-+Í-iẶiĂÍV>ÍLiÍĂÕ} ÞÍ`Û`i`ÍÌÍLÕvviĂÍ«ÍiĂÞ]ÍÜ V ÍĂi«-ĂiÊiÌÊÍ`>Ì>Í«>}iÊÍ>`ÍvĂiiÍ«>}iÊ]Í>`ÍLÕvviĂÍiĂÞ]ÍÜ V ÍVÊÊÌÊÍvÍÌ Ăi>`Ê]ÍÊ]Í
i`ÍÊiẶiĂÊ]Í>`ÍÌ iĂʰÍÊÌÍvÍÌ iÍiĂÞÍÕÊi`ÍLÞÍ-+Í-iẶiĂÍ}iÊÍÌÍÌ iÍLÕvviĂÍ«°
N Note SQL Server does consume more memory than simply that specified by the i]t[oanran[iaiknu
setting
You can also manage the configuration values for iejoanraniaiknu and i]toanran
iaiknu by using the ol[_kjbecqnaÍÊÞÊÌiÍÊÌĂi`Í«ĂVi`ÕĂi°Í/ÍÊiiÍÌ iÍVv}ÕĂ>ÌÍÛ>ÕiÊÍvĂÍ
Ì iÊiÍ«>Ă>iÌiĂÊ]ÍiÝiVÕÌiÍÌ iÍol[_kjbecqna stored procedure as follows:
ata_ol[_kjbecqna#iejoanraniaiknu$I>%#
ata_ol[_kjbecqna#i]toanraniaiknu$I>%#
}ÕĂiÍÓ{ÍÊ ÜÊÍÌ iÍĂiÊÕÌÍvÍẮ}ÍÌ iÊiÍV>`ʰ
Figure 2-4 SQL Server memory configuration properties
Trang 6ÌiÍÌ >ÌÍÌ iÍ`iv>ÕÌÍÛ>ÕiÍvĂÍÌ iÍiejoanraniaiknu setting is 0MB, and for the i]t oanraniaiknuÍÊiÌÌ}ÍÌÍÊÍÓ£{Ì{nÎỈ{Ì °ÍÊ]Íi]toanraniaiknu cannot be set to less
Ì >Í{ °
You can also modify these configuration values using the ol[_kjbecqna stored procedure
ĂÍiÝ>«i]ÍÌÍÊiÌÍi]toanraniaiknu to 200MB and iejoanraniaiknuÍÌÍ£ôô ]ÍiÝiVÕÌiÍ the following set of statements (oap[iaiknu*omhÍÍÌ iÍ`Ü>`®\
QOAi]opan
ATA?ol[_kjbecqna#odks]`r]j_a`klpekj#(#-#
NA?KJBECQNA
ata_ol[_kjbecqna#iejoanraniaiknu$I>%#(-,,
ata_ol[_kjbecqna#i]toanraniaiknu$I>%#(.,,
NA?KJBECQNASEPDKRANNE@A
/ iÍiejoanraniaiknu and i]toanraniaiknu configurations are classified as advanced options By default, the ol[_kjbecqna stored procedure does not affect/display the advanced options Setting odks]`r]j_a`klpekj to - as shown previously enables the ol[_kjbecqna stored procedure to affect/display the advanced options
/ iÍNA?KJBECQNA statement updates the memory configuration values set by ol[_kjbecqna Since ad hoc updates to the system catalog containing the memory configuration values are not recommended, the KRANNE@A flag is used with the NA?KJBECQNA statement to force the memory configuration If you do the memory configuration through Management Studio,
>>}iiÌÍ-ÌÕ`Í>ÕÌ>ÌV>ÞÍiÝiVÕÌiÊÍÌ iÍNA?KJBECQNASEPDKRANNE@A statement after the configuration setting
ÍÊiÍĂ>ĂiÍVĂVÕÊÌ>ViÊ]ÍÞÕÍ>ÞÍii`ÍÌÍ>ÜÍvĂÍ-+Í-iẶiĂÍÊ >Ă}Í>ÍÊÞÊÌi½ÊÍ
ÍÌ°Í Ì ÍÊiẶiĂÊÍ>ĂiÍ i>ÛÞÍÕÊiĂÊÍvÍiĂÞÍ>`ÍÌ ÕÊÍii«Í«ÕÊ }Íi>V ÍÌ iĂÍvĂÍiĂÞ°Í
iĂÞÍ>>}iiÌÍÛiĂ i>`ÍLÞÍVv}ÕĂ}Í-+Í-iẶiĂÍvĂÍ>ÍvÝi`ÍiĂÞÍÊđi°ÍÜiÛiĂ]Í
«i>ÊiÍii«ÍÍ`ÍÌ >ÌÍÊViÍ-+Í-iẶiĂÍÊÍ>ÍiÝÌĂiiÞÍĂiÊÕĂViÌiÊÛiÍ«ĂViÊÊ]ÍÌÍÊÍ } ÞÍĂiVi`i`ÍÌ >ÌÍÞÕÍ >ÛiÍ>Í`i`V>Ìi`Í-+Í-iẶiĂÍ«Ă`ÕVÌÍ>V i°
ÜÍÌ >ÌÍÞÕÍÕ`iĂÊÌ>`Í-+Í-iẶiĂÍiĂÞÍ>>}iiÌ]Íi̽ÊÍVÊ`iĂÍÌ iÍperfor->ViÍVÕÌiĂÊÍÞÕÍV>ÍÕÊiÍÌÍ>>ÞđiÍÊÌĂiÊÊÍÍiĂÞ]Í>ÊÍÊ ÜÍÍ/>LiÍÓ£°
Table 2-1 Performance Monitor Counters to Analyze Memory Pressure
Object(Instance[,InstanceN]) Counter Description Values
dependent L]cao+oa_ Rate of hard page faults Average
Û>ÕiÍÍxô L]caB]qhpo+oa_ Rate of total page faults
its baseline value for trend analysis L]caoEjlqp+oa_ Rate of input page faults
L]caoKqplqp+oa_ Rate of output page faults
Trang 7Object(Instance[,InstanceN]) Counter Description Values
OMHOanran6>qbbanI]j]can >qbban_]_da
depn]pek
Percentage of requests served out of buffer cache
Average value q 90%
L]caHeba
Atla_p]j_u
/i page spends in buffer
Average Û>ÕiÍÍÎôô
?da_glkejp
L]cao+oa_
PagesÍÜĂÌÌiÍÌÍ`ÊÍLÞÍ
V iV«Ì
Average Û>ÕiÍÍÎô H]vusnepao+oa_ ĂÌÞ aged pages flushed
from buffer
Average value < 20 OMHOanran6IaiknuI]j]can IaiknuCn]jpo
Laj`ejc
ÕLiĂ of processes waiting for memory grant
Average value = 0 P]ncapOanran
Iaiknu$G>%
>ÝÕ physical
iĂÞÍ-+Í-iẶiĂÍV>Í VÊÕiÍÍÌ iÍLÝ
of physical memory Pkp]hOanran
Iaiknu$G>%
Physical memory cur-ĂiÌÞÍ>ÊÊ}i`ÍÌÍ-+Í
Iaiknu$G>%
that this process has allocated that cannot
be shared with other processes
½ÍÜÍÜ>ÍÞÕÍÌ ĂÕ} ÍÌ iÊiÍVÕÌiĂÊÍÌÍ}iÌÍ>ÍLiÌÌiĂÍ`i> of what you can use them for
Available Bytes
/ iÍ=r]eh]^ha>upaoÍVÕÌiĂÍĂi«ĂiÊiÌÊÍvĂiiÍ« ÞÊV>ÍiĂÞÍÍÌ iÍÊÞÊÌi°ÍĂÍ}`Í«iĂ-vĂ>Vi]ÍÌ ÊÍVÕÌiĂÍÛ>ÕiÍÊ Õ`ÍÌÍLiÍÌÍܰÍvÍ-+Í-iẶiĂÍÊÍVv}ÕĂi`ÍvĂÍ`Þ>VÍ
memory usage, then this value will be controlled by calls to a Windows API that determines
-+Í-iẶiĂÍiĂÞÍÌÍV >}}Í`V>ÌiÊÍÌ >ÌÍÌ iÍÊiẶiĂÍÊÍÕ`iĂÍÊiÛiĂiÍiĂÞÍÊÌĂiÊʰ
Pages/sec and Page Faults/sec Counters
/ÍÕ`iĂÊÌ>`ÍÌ iÍ«ĂÌ>ViÍvÍÌ iÍL]cao+oa_ and L]caB]qhpo+oa_ counters, you first need
to learn about page faults A page fault occurs when a process requires code or data that is not
in its working setÍÌÊÍÊ«>ViÍÍ« ÞÊV>ÍiĂÞ®°ÍÌÍ>ÞÍi>`ÍÌÍ>ÍÊvÌÍ«>}iÍv>ÕÌÍĂÍ>Í >Ă`Í«>}iÍ
fault If the faulted page is found elsewhere in physical memory, then it is called a soft page
fault A hard page faultÍVVÕĂÊÍÜ iÍ>Í«ĂViÊÊÍĂiµÕĂiÊÍV`iÍĂÍ`>Ì>ÍÌ >ÌÍÊÍÌÍÍÌÊÍÜĂ}Í
ÊiÌÍĂÍiÊiÜ iĂiÍÍ« ÞÊV>ÍiĂÞÍ>`ÍÕÊÌÍLiÍĂiÌĂiÛi`ÍvĂÍ`ʰ
/ iÍÊ«ii`ÍvÍ>Í`ÊÍ>VViÊÊÍÊÍÍÌ iÍĂ`iĂÍvÍÊiV`Ê]ÍÜ iĂi>ÊÍ>ÍiĂÞÍ>VViÊÊÍÊÍÍ
Ì iÍĂ`iĂÍvÍ>ÊiV`ʰÍ/ ÊÍ Õ}iÍ`vviĂiViÍÍÌ iÍÊ«ii`ÍLiÌÜiiÍ>Í`ÊÍ>VViÊÊÍ>`Í>Íi-ĂÞÍ>VViÊÊÍ>iÊÍÌ iÍivviVÌÍvÍ >Ă`Í«>}iÍv>ÕÌÊÍÊ}vV>ÌÍV«>Ăi`ÍÌÍÌ >ÌÍvÍÊvÌÍ«>}iÍv>ÕÌʰ
/ iÍL]cao+oa_ÍVÕÌiĂÍĂi«ĂiÊiÌÊÍÌ iÍÕLiĂÍvÍ«>}iÊÍĂi>`ÍvĂÍĂÍÜĂÌÌiÍÌÍ`ÊÍ«iĂÍ
ÊiV`ÍÌÍĂiÊÛiÍ >Ă`Í«>}iÍv>ÕÌʰÍ/ iÍL]caB]qhpo+oa_ performance counter indicates the
total page faults per second—soft page faults plus hard page faults—handled by the system
Trang 8>Ă`Í«>}iÍv>ÕÌÊ]Í`V>Ìi`ÍLÞÍL]cao+oa_, should not be consistently high If this counter
ÊÍVÊÊÌiÌÞÍÛiĂÞÍ } ]ÍÌ iÍ-+Í-iẶiĂÍÊÍ«ĂL>LÞÍÊÌ>Ặ}ÍÌ iĂÍ>««V>ÌʰÍ/ iĂiÍ>ĂiÍÍ hard and fast numbers for what indicates a problem, because these numbers will vary widely LiÌÜiiÍÊÞÊÌiÊÍL>Êi`ÍÍÌ iÍ>ÕÌÍ>`ÍÌÞ«iÍvÍiĂÞÍ>ÊÍÜiÍ>ÊÍÌ iÍÊ«ii`ÍvÍ`ÊÍ>VViÊÊÍ
on the system
If the L]cao+oa_ counter isÍÛiĂÞÍ } ]ÍÌ iÍÞÕÍV>ÍLĂi>ÍÌÍÕ«ÍÌÍL]caoEjlqp+oa_ and L]caoKqplqp+oa_:
Í UÍ L]caoEjlqp+oa_: An application will wait only on an input page, not on an output page
Í UÍ L]caoKqplqp+oa_: Page output will stress the system, but an application usually does not see this stress Pages output are usually represented by the application’s dirty
«>}iÊÍÌ >ÌÍii`ÍÌÍLiÍL>Vi`ÍÕÌÍÌÍÌ iÍ`ʰÍL]caoKqplqp+oa_ is an issue only when
`ÊÍ>`ÍLiViÍ>ÍÊÊÕi°
Ê]ÍV iVÍLnk_aoo6L]caB]qhpo+oa_ÍÌÍv`ÍÕÌÍÜ V Í«ĂViÊÊÍÊÍV>ÕÊ}ÍiÝViÊÊÛiÍ paging in case of high L]cao+oa_°Í/ iÍLnk_aoo object is the system component that provides performance data for the processes running on the system, which are individually represented
by their corresponding instance name
ĂÍiÝ>«i]ÍÌ iÍ-+Í-iẶiĂÍ«ĂViÊÊÍÊÍĂi«ĂiÊiÌi`ÍLÞÍÌ iÍomhoanrn instance of the Lnk_aooÍLiV̰Í} ÍÕLiĂÊÍvĂÍÌ ÊÍVÕÌiĂÍÕÊÕ>ÞÍ`ÍÌÍi>ÍÕV ÍÕiÊÊÍL]cao+oa_ is high L]caB]qhpo+oa_ can range all over the spectrum with normal application behavior, with Û>ÕiÊÍvĂÍôÍÌÍ£]ôôôÍ«iĂÍÊiV`ÍLi}Í>VVi«Ì>Li°Í/ ÊÍiÌĂiÍ`>Ì>ÍÊiÌÍi>ÊÍ>ÍL>ÊiiÍÊÍ iÊÊiÌ>ÍÌÍ`iÌiĂiÍÌ iÍiÝ«iVÌi`ÍĂ>ÍLi >Ûð
Buffer Cache Hit Ratio
/ iÍbuffer cache is the pool of buffer pages into which data pages are read, and it is often the
L}}iÊÌÍ«>ĂÌÍvÍÌ iÍ-+Í-iẶiĂÍiĂÞÍ«°Í/ ÊÍVÕÌiĂÍÛ>ÕiÍÊ Õ`ÍLiÍ>ÊÍ } Í>ÊÍ«ÊÊLi]Í iÊ«iV>ÞÍvĂÍ"/*ÍÊÞÊÌiÊÍÌ >ÌÍÊ Õ`Í >ÛiÍv>ĂÞÍĂi}iÌi`Í`>Ì>Í>VViÊÊ]ÍÕiÍ>ÍÜ>Ăi- ÕÊiÍĂÍĂi«ĂÌ}ÍÊÞÊÌi°ÍÌÍÊÍiÝÌĂiiÞÍVÍÌÍv`ÍÌ ÊÍVÕÌiĂÍÛ>ÕiÍ>ÊÍÍ«iĂViÌÍ
or more for most production servers A low >qbban_]_dadepn]pek value indicates that few requests could be served out of the buffer cache, with the rest of the requests being served vĂÍ`ʰ
7 iÍÌ ÊÍ >««iÊ]ÍiÌ iĂÍ-+Í-iẶiĂÍÊÍÊÌÍÜ>Ă}ÍÕ«ÍĂÍÌ iÍiĂÞÍĂiµÕĂiiÌÍvÍ
Ì iÍLÕvviĂÍV>V iÍÊÍĂiÍÌ >ÍÌ iÍ>ÝÕÍiĂÞÍ>Û>>LiÍvĂÍÌÊÍ}ĂÜÌ °ÍvÍÌ ÊÍÊÍVÊÊ-tently low, you should consider getting more memory for the system
Page Life Expectancy
L]caHebaAtla_p]j_u indicates how long a page will stay in the buffer pool without being ref-iĂiVi`°ÍiiĂ>Þ]Í>ÍÜÍÕLiĂÍvĂÍÌ ÊÍVÕÌiĂÍi>ÊÍÌ >ÌÍ«>}iÊÍ>ĂiÍLi}ÍĂiÛi`ÍvĂÍ the buffer, lowering the efficiency of the cache and indicating the possibility of memory pres-ÊÕĂi°Í"ÍĂi«ĂÌ}ÍÊÞÊÌiÊ]Í>ÊÍ««Êi`ÍÌÍ"/*ÍÊÞÊÌiÊ]ÍÌ ÊÍÕLiĂÍ>ÞÍĂi>Í>ÌÍ>ÍÜiĂÍ Û>ÕiÍÊViÍĂiÍ`>Ì>ÍÊÍ>VViÊÊi`ÍvĂÍĂi«ĂÌ}ÍÊÞÊÌiʰÍÍĂi>Ê>LiÍÛ>ÕiÍÌÍiÝ«iVÌÍÌÍÊiiÍ iĂiÍÊÍÎôôÍÊiV`ÊÍĂÍĂi°
Trang 9Checkpoint Pages/sec
/ iÍ?da_glkejpL]cao+oa_ÍVÕÌiĂÍĂi«ĂiÊiÌÊÍÌ iÍÕLiĂÍvÍ«>}iÊÍÌ >ÌÍ>ĂiÍÛi`ÍÌÍ`ÊÍLÞÍ
>ÍV iV«ÌÍ«iĂ>̰Í/ iÊiÍÕLiĂÊÍÊ Õ`ÍLiÍĂi>ÌÛiÞÍÜ]ÍvĂÍiÝ>«i]ÍiÊÊÍÌ >ÍÎôÍ«iĂÍ
ÊiV`ÍvĂÍÊÌÍÊÞÊÌiʰÍÍ } iĂÍÕLiĂÍi>ÊÍĂiÍ«>}iÊÍ>ĂiÍLi}Í>Ăi`Í>ÊÍ`ĂÌÞÍÍÌ iÍ
V>V i°ÍÍ`ĂÌÞÍ«>}iÍÊÍiÍÌ >ÌÍÊÍ`vi`ÍÜ iÍÍÌ iÍLÕvviðÍ7 iÍ̽ÊÍ`vi`]Í̽ÊÍ>Ăi`Í
>ÊÍ`ĂÌÞÍ>`ÍÜÍ}iÌÍÜĂÌÌiÍL>VÍÌÍÌ iÍ`ÊÍ`ÕĂ}ÍÌ iÍiÝÌÍV iV«Ì°Í} iĂÍÛ>ÕiÊÍÍÌ ÊÍ
counter indicate a larger number of writes occurring within the system, possibly indicative of
Ĩ"Í«ĂLiʰ
Lazy writes/sec
/ iÍH]vusnepao+oa_ counter records the number of buffers written each second by the buffer
>>}iĂ½ÊÍ>đÞÍÜĂÌiÍ«ĂViÊʰÍ/ ÊÍ«ĂViÊÊÍÊÍÜ iĂiÍÌ iÍ`ĂÌÞ]Í>}i`ÍLÕvviĂÊÍ>ĂiÍĂiÛi`ÍvĂÍ
the buffer by a system process that frees the memory up for other uses A dirty, aged buffer
ÊÍiÍÌ >ÌÍ >ÊÍV >}iÊÍ>`Íii`ÊÍÌÍLiÍÜĂÌÌiÍÌÍÌ iÍ`ʰÍ} iĂÍÛ>ÕiÊÍÍÌ ÊÍVÕÌiĂÍ
«ÊÊLÞÍ`V>ÌiÍĨ"ÍÊÊÕiÊÍĂÍiÛiÍiĂÞÍ«ĂLiʰÍ/ iÍH]vusnepao+oa_ values should
consistently be less than 20 for the average system
Memory Grants Pending
/ iÍIaiknuCn]jpoLaj`ejc counter represents the number of processes pending for a
mem-ĂÞÍ}Ă>ÌÍÜÌ Í-+Í-iẶiĂÍiĂÞ°ÍvÍÌ ÊÍVÕÌiĂÍÛ>ÕiÍÊÍ } ]ÍÌ iÍ-+Í-iẶiĂÍÊÍÊ ĂÌÍvÍ
iĂÞ°Í1`iĂÍĂ>ÍV`ÌÊ]ÍÌ ÊÍVÕÌiĂÍÛ>ÕiÍÊ Õ`ÍVÊÊÌiÌÞÍLiÍôÍvĂÍÊÌÍ«Ă-duction servers
Another way to retrieve this value, on the fly, is to run queries against theÍ6Íouo*`i[
ata_[mqanu[iaiknu[cn]jpo A jqhh value in the column cn]jp[peia indicates that the process
ÊÍÊÌÍÜ>Ì}ÍvĂÍ>ÍiĂÞÍ}Ă>̰Í/ ÊÍÊÍiÍiÌ `ÍÞÕÍV>ÍÕÊiÍÌÍÌĂÕLiÊ Ì͵ÕiĂÞÍ
ÌiÕÌÊÍLÞÍ`iÌvÞ}ÍÌ >ÌÍ>͵ÕiĂÞÍĂ͵ÕiĂiÊ®ÍÊÍÜ>Ì}ÍÍiĂÞÍÍĂ`iĂÍÌÍiÝiVÕÌi°
Target Server Memory (KB) and Total Server Memory (KB)
P]ncapOanranIaiknu$G>% indicatesÍÌ iÍÌÌ>Í>ÕÌÍvÍ`Þ>VÍiĂÞÍ-+Í-iẶiĂÍÊÍ
willing to consume Pkp]hOanranIaiknu$G>% indicates the amount of memory currently
>ÊÊ}i`ÍÌÍ-+Í-iẶiðÍ/ iÍPkp]hOanranIaiknu$G>% counter value can be very high if the
ÊÞÊÌiÍÊÍ`i`V>Ìi`ÍÌÍ-+Í-iẶiðÍvÍPkp]hOanranIaiknu$G>% is much less than P]ncap
OanranIaiknu$G>%]ÍÌ iÍiÌ iĂÍÌ iÍ-+Í-iẶiĂÍiĂÞÍĂiµÕĂiiÌÍÊÍÜ]ÍÌ iÍi]toanran
iaiknuÍVv}ÕĂ>ÌÍ«>Ă>iÌiĂÍvÍ-+Í-iẶiĂÍÊÍÊiÌÍ>ÌÍÌÍÜÍ>ÍÛ>Õi]ÍĂÍÌ iÍÊÞÊÌiÍÊÍÍ
warm-up
phase°Í/ iÍÜ>ĂÕ«Í« >ÊiÍÊÍÌ iÍ«iĂ`Í>vÌiĂÍ-+Í-iẶiĂÍÊÍÊÌ>ĂÌi`ÍÜ iÍÌ iÍ`>Ì>-L>ÊiÍÊiẶiĂÍÊÍÍÌ iÍ«ĂViÊÊÍvÍiÝ«>`}ÍÌÊÍiĂÞÍ>V>ÌÍ`Þ>V>ÞÍ>ÊÍĂiÍ`>Ì>Í
sets are accessed, bringing more data pages into memory
9ÕÍV>ÍVvĂÍ>ÍÜÍiĂÞÍĂiµÕĂiiÌÍvĂÍ-+Í-iẶiĂÍLÞÍÌ iÍ«ĂiÊiViÍvÍ>Í>Ă}iÍ
ÕLiĂÍvÍvĂiiÍ«>}iÊ]ÍÕÊÕ>ÞÍx]ôôôÍĂÍĂi°
Memory Bottleneck Resolutions
When there is high stress on memory, indicated by a large number of hard page faults, you can ĂiÊÛiÍiĂÞÍLÌÌiiVÍÕÊ}ÍÌ iÍvÜV >ĂÌÍÊ ÜÍÍ}ÕĂiÍÓx°
Trang 10Figure 2-5 Memory bottleneck resolution chart
ÍviÜÍvÍÌ iÍVÍĂiÊÕÌÊÍvĂÍiĂÞÍLÌÌiiVÊÍ>ĂiÍ>ÊÍvÜÊ\
Í UÍ "«Ìđ}Í>««V>ÌÍÜĂ>`
Í UÍ V>Ì}ÍĂiÍiĂÞÍÌÍ-+Í-iẶiĂ
Í UÍ VĂi>Ê}ÍÊÞÊÌiÍiĂÞ
Í
Í
Í UÍ 1Ê}ÍiĂÞÍLiÞ`Í{ ÍÜÌ ÍÎÓLÌÍ-+Í-iẶiĂ
i̽ÊÍÌ>iÍ>ÍÍ>ÌÍi>V ÍvÍÌ iÊiÍÍÌÕð
...>`ấvè/iiịôấếấế>ịèi>}iấèôèv-+-iii? ?-+ -ii>>}iấiịLị}ĩ}ấ}èấiịôấi`ị>V>ị
You
canVv}ếi-+-iiv`ị>Viị>>}ii? ?-+ -ii>>}i-i? ?-? ?ế`ư -? ?èèiiịv`ivèi-ii*ôièiấ`>}Lí]>ấấĩ...
èiiấếViấ]è/ấấô>èVế>ịèiv>ấịấèi }-+ -ii7i-+
-iiấếèvV>Viưiịđ]>ôViấấĩ? ?-+ -iiưV>i`lazy writerđ>ấ
èĩiíèiấiịè>è>iế}viièi>iịô>}iấĩ? ?-+ -ii/ấ
L>Vè`ấ