DBA的十大惡夢 by 楊志強

  • 資料庫出現I/O問題
    • DBCC CHECKDB可以發現故障,但結果文字閱讀不易,INSERT INTO @T EXECUTE('DBCC CHECKDB WITH TABLEREULTS'),將SP執行結果塞入Table進一步利用(甚至發出電子郵件通知)
    • 事前防範Storage故障所引發的問題
  • 埋藏在事件檢視器的潛在問題
    • T-SQL無法直接讀取系統事件
    • Powershell Get-WmiObject –Class Win32_NTLogEvent
    • Get-WmiObject –Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Application' AND EventID=1" …
    • 利用PowerShell Script將事件抓進DB進一步分析、應用
  • 亡羊補牢,解析交易記錄檔
    • 以下為Undocumented SP: 不保證永久有效
    • SELECT * FROM fn_dblog(null, null)
    • 由fn_dblog找出Transaction_ID,組成LSN可RESTORE LOG ... FROM DISK=... WITH RECOVERY, STOPBEFOREMARK='LSN:.....' 將資料庫還原到指定時間點
    • 此法不可靠也不夠直覺,良心話: 花錢買3rd Party工具才是王道
    • fn_dump_dblog... --> 離線Log適用
  • 快速重建交易記錄檔
    • 搭配核心數、HD數開多個DataFile可以增進效能,但Log檔一個就好,開多個適得其反
    • Log檔毁損的緊急處置方法(Emergency Mode->Single User Mode->DBCC CHECKDB自動補Log檔)
  • 空中換引擎,解救爆滿的HD
    • DBCC SHOWFILESTATS
    • DBCC SHRINKFILE('OrdHist2',EMPTYFILE) 縮小資料庫,將特定DataFile的資料移走,過程中DB可如常讀取寫入,速度不快但系統持續可用
    • 在Filegroup加入新的DataFile,利用上述指令將資料移到新增的DataFile
  • 正式資料庫被移除
    • DDL Trigger,遇到砍DB指令時Rollback並丟出錯誤,防止資料表被移除
    • 用RaiseError with Log,將警示寫入事件檢視器
  • 偵測SQL Agent停止
    • T-SQL SELECT * FROM sysprocesses檢查SQL Agent是否存在
    • 設成Scheduled Task定期檢查
  • 使用手機查看過去15min的CPU
    • sys.dm_os_sys_info取得CPU Load,串URL將資料塞入Google Chart
  • CPU飆高時自動啟動追蹤功能
    • SQL Profiler可設停止時間,無法預定時間啟動,但Profiler可以將設定存成SQL Script,執行之即可啟動Trace
    • fn_trace_gettable()抓出Trace內容以Table方式呈現
  • 用手機KILL鎖定問題
    App/IVR(語音操作)
  • Super SQL Server FB社團 (本場次的所有內容會放在該社團)

Visual Studio 2013 Keynote

  • VS產品更新頻率加快,約每季更新一次
  • VS2013 Title Bar增加笑臉/哭臉鈕,對各功能進行回饋(按讚或嚧爆?)
  • Medern Web現代化網站的要件
    • Responsive Design - 適應各裝置各解析度
    • Web API/Open Data – 服務導向
    • Social Integrated – 與FB整合
    • Scalable – 自動Scale up、Scale out
  • 可將設定儲存到雲端,在多台機器間同步VS設定
  • ASP.NET專案改為單一專案範本,建立精靈時決定要用MVC、WebForm、SPA、WebAPI,且支援自訂選取個別為專案加入WebForms/MVC/WebAPI功能
  • ASP.NET專案內含Bootstrap,Responsive Web Design Ready
  • BrowserLink,一次開啟多種瀏覽器(IE、Chrome、FF...),改好ASPX存檔,按Rerfresh(CSS不用按Refresh就更新),所有瀏覽器自動更新到修改後的結果
  • app.Use***Authentication,輕鬆支援Microsoft Account、Google Account、FB Account認證整合
  • Azure部署程序更簡化
  • *** 我是Win8.1相關功能分隔線 ***
  • Win8/8.1/WP8 Unity3D 模組免費(iOS/Android要1500元)
  • Win8.1商業平板,擺脫平板只是for fun的刻板印象
    零售業: 店員平台,放入商品,設定折扣,刷卡結帳
    醫院: 病人資訊、看診輔助
  • Geofense(地理圍欄),進出某個地理空間時啟動特定App
  • 支援3D列印API
  • App評價不佳的原因: App Hang、閃退、反應時間太長、過度耗電
  • VS2013支援WinApp效能診斷(CPU Load取樣、XAML UI回應性、耗電)
    記錄一段時間的CPU、網路使用狀況,估算電力耗盡時間、JavaScript函式計時、JavaScript記憶體
  • *** 我是跨平台開發(Xamarin)分隔線 ***
  • Xamarin為付費商業軟體
  • Android可直接拉控制項,馬上寫C#;iPhone要先在Xecode拉好框架,再到VS裡寫Code Behind,下個版本會支援直接拖拉
  • iOS專案仍需要Mac機器進行編譯
  • 跨平台開發的痛: 要養不同的Team、技術、元件難以共享。Xamarin可將Business Logic抽出寫成Core Library供iOS/Android介面共享。(簡便方法是用Add as Link大絕,不然用Portable Library亦可)
  • 支援.NET 2.0 SOAP Web Service、WCF、RESTFul
  • *** 我是Cloud部署與測試分隔線 ***
  • Azure已納入Oracle DB/Linux VM、PHP... 愈來愈開放
  • Azure端已有VS2013 RC桌面環境可登入測試。(MSDN訂閱可啟用Azure試用)
  • 巨型壓力測試: 模擬數萬個Client,萬箭齊發情境
  • 錄製測試 -> 轉成壓力測試 –> 選擇用Team Foundaton Service跑雲端壓測(需幾分鐘等待設定完成) -> 由雲端取回測試報表
  • 試用版上限: 15000人次-分鐘。ex: 5000人次可以跑三分鐘
  • MSDN訂戶Azure權益,Ultimate版本每月有4600元額度,免提供信用卡資訊,9/30前開通可以抽跑車
  • *** 我是TFS分隔線 ***
  • TFS(Server) vs TFS(Service),Server才能客製流程跟工作表單、BI分析報表,支援AD登入,但Service改版速度很快,或許不久後就會改觀
  • 功能分解成使用者劇本,使用者劇本再分解成工作。Project內包含多個團隊,成員不同,有各自的Portal及Burndown
  • InRelease –> GUI部署工具,設定DEV到UAT、UAT到PROD的設定,One-Click完成,還可以設定Approver(出包誰負責,在江湖打滾過就知道這個功能多重要 XD )
  • *** 客戶證言: 趨勢科技Anden 分享使用TFS敏捷開發的經驗
  • VS2013 9/9 RC、10/18 RTM <== 有沒有VS2012還沒用熟,新版就出來的八卦

運用Scrum進行專案規劃 – Agile Planning by Ruddy

  • 每回見到Ruddy老師都會燃起"我可以再Coding十年"的信心,老師儼然已成中年程序員的精神寄託兼信仰中心
  • 敏捷 - 利用短週期的反覆開發獲得頻繁回饋
  • Wiki上的Scrum要素是鬼扯淡
  • Planning –> 開發 Daily Standup Meeting –> Demo(交付) –> Retrospective 回顧
  • 為什麼要Agile? 老闆: 每週要交付一個版本,通過測試,而且要讓客戶點頭 --> 不可能的任務
  • 達成不可能任務的方法: 1) 將大問題拆成小問題(用短週期換取客戶回饋) 2) 只專注於最重要的事件心無雜念 3) 確保交付的東西可以運作 4) 一定要尋求回饋 5) 必要時可以改變流程  6) 勇於負責(有錯就立刻改) 要設期望值/控制品質/控制進度/把自己當客戶去思考產品
  • 開發軟體是世界上最崇高的工作 -- 用軟體幫助世人,增進人類全體之生活來著
  • 三個簡單準則: 1) 初期不可能蒐集完整需求 2) 需求一定會變化 3) 總會有任務超時超支
  • "可工作的軟體"是衡量專成功的主要度量指標
  • 經驗的神奇之處在於提醒你不要再犯同樣的錯誤。第N+1次Iteration要以第N次Iteration的回饋為依據
  • Scrum歷史
    竹內弘高/野中郁次郎 哈佛論文 豐田式管理 首次出現Scrum一詞,Ken Schwaber(在MS)&Jeff Sutherland以Scrum為主題寫了Paper,在鹽湖城會議發表敏捷宣言
    Kent Beck 程式有壞味道
    Martin Fowler 倡議重構(Refactoring)
    Mike Cohn - User Story的發明人
    Henrik Kniberg – 著作"煙硝中的Scrum",最暢銷的一本(Free電子書)
  • 把大案子大需求拆解細分個個擊破 -> Scrum很適合做大案子
  • Timebox –> 時間箱,時間到就要有東西出來。不是時間箱的例子: 新創公司的作品,寫到好為止。
  • Prodcut Backlog –> Sprint Backlog –> Sprint(1-4wks) [每天Standup Meeting,焦點集中在: 昨天做了什麼? 今天要做什麼? 有什麼困難? 勿超過15分鐘]-> Retrospective
  • 浮現式設計(Emergent Design) – OOP、Design Pattern
  • 完成的定義: 由團隊認定,多半由PM或QA決定
  • 三種角色: Project Owner、Scrum Master、Team
  • Artifacts(工作物件): Product Backlog、Sprint Backlog、Burndown Chart
  • **啟動計劃**: 10問
  • (1) 問尖銳的問題!! 事後才問是事後諸葛無意義,找到正確的人問對問題,會有驚人回饋
  • Remind ourselves why we are here? 專案的目的? 客戶是誰? 為何要先做這個專案?
  • 好客戶: 主動提供意見。一般客戶多半要先看Demo,經詢問才會出聲
  • 目的: 更好更明確的抉擇、平衡矛盾共加以取捨、充分授權獨立思考才能更好
  • 加班要加對時候: 開始、結束、中間點放,長期加班會造成生產力下降
  • (2) Create an elvevator pitch! 30秒電梯演講! 30秒和二句話描述這個專案
    目標客戶、需求機會、產品名稱、產品類別、主要優勢、競爭對手、主要區別
  • (3) 設計產品包裝
    一目了然、引人注目、提出好處
  • (4) 列出否定清單
    否定項目區分成需要清除的巨石、無須擔心的東西
  • (5) 認識鄰居
    設備維護部門、MS Support、DBA、Open Source的Community是否活躍… 判定可用資源及其可靠性
  • (6) 展示解決方案
    架構巨觀藍圖,確保溝通有效,獲取其他單位的意見
  • (7) 關注那些使我們睡不著覺的問題
    找出風險,在尚未萌芽時解決
  • (8) 估算項目的規模
    無法準確評估,但仍需要讓需求者知道何時可以拿到成果,即使只是猜測也好
  • (9) 明確知道我們要捨棄什麼?
    範圍、預算、時間、質量(不能妥協)、簡單好用、簡單又簡單、詳細設計 <== 決定優先權重
  • (10) 對專案所需付出資源加以展示
    專案需要的時間、花費、何種團隊才能勝任
    EX: 7人三個半月120萬,首次Release - 小於3個月完成建置、一週驗收測試、一週培訓、交付
  • 最有效的Feedback –> 匿名回饋是最真實的
  • 敏捷不是互相猜測,而是馬上做決策。讓共同的目標,讓團隊自我管理,主動成長。

Visual Studio 2013 新功能及訣竅 by demo

  • VS2013小冊子裡有詳細新功能介紹
  • VS2013的Title Bar右上角有現在登入的使用者,可在雲端建立共用Profile,建議開發設定選C#(熱鍵為單手操作,效率高),共用Profile可使多台機器的設定保持一致(同步範圍可調: 外觀、環境別名、快速鍵、啟動、文字編輯器)
  • 選項設定畫面可輸入關鍵字在茫茫選項大海中篩選出要找的項目
  • TFS Explorer改為Metro化,更易操作
  • Code Lens
    • 在方法上顯示被幾個地方呼叫(n 參考),點下後顯示參考來源清單,且以非同步方式載入,不會卡住操作(比類似外掛更先進)
    • 如果有單元測試,可顯示測試次數
    • 專案如果連結到TFS,可以顯示作者及變更次數
    • 支援熱鍵!
  • View Definition vs Go Definition
    • 傳統按F12一路追蹤穿過多層後,開發人員常會迷失所在位置
    • Alt-F12 View Definition,另開浮動視窗顯示定義來源,原有視窗不動
    • 熱鍵不用背,Mouse OnHover就會有提示
  • 捲軸加強:
    • 捲軸色塊顯示: 區別異動未簽入、中斷點、異更後未儲存...等等
    • 垂直捲軸可以"文件地圖"方式顯示(展示整份文件縮圖)
    • 滑鼠經過捲軸時用浮動視窗預覽該位置的程式碼
  • Tips: 同一個檔案可切成上下兩塊檢視區(VS2012已有),同時參照不同段落
  • 巡覽至(Ctrl + ,) 快速在程式碼中找到吻合關鍵字的程式
  • Alt + 上下方向鍵,將某行程式向上或向下搬移
  • 打字時預設會自動補上右括弧、右引號,若不習慣可關閉
  • 通知視窗: Title Bar旗子圖示,通知有套件可更新
  • BrowserLink儀表板:
    能主動偵測哪些Browser開啟了專案(方法: 在網頁偷插入JS當內應)
    ASPX或CSS更改時,Browser們也會自動顯示最新結果
  • SQL資料比對工具: VS2012消失,只剩Schema Compare,VS2013又加回來了
    工具/SQL Server描述比較(比對兩個DB Schema的差異),方便將Schema更新部署到目標DB去
  • 工作清單: (檢視/工作清單)
    類似內藏在VS內部的ToDo List,不需要離開IDE就可用的便利貼
    //TODO //HACK(鋸箭) //UNDONE –> 自動列入工作清單的註解區
    捷徑 Ctrl + E,T, Ctrl + K,H,按下後左方出現箭頭小Icon,自動加入工作清單
  • 加入/移除書籤: Ctrl + B,T, Ctrl + K,K,左方出現書籤Icon
    Ctrl + B,P(上個書籤) Ctrl + B,N(下個書籤)
    Ctrl + B,C(清光書籤)
  • Ctrl + Shift + V: 循環剪胋環 (找回前幾次複製的內容)
  • Ctrl + F5 Attach to Process比重新Build重跑IIS Express快,可取代F5使用
  • 中斷點視窗: 一次列出所有中斷點方便管理
  • 中斷點條件式、計次: 指定特定條件成立時才中斷,或執行過幾次後才中斷,取代猛按F5。
  • 【插花】如果有冷氣廠商要強打恆溫舒眠功能,可以考慮用"讓你的客廳像TICC大會堂一樣舒適"當廣告詞,這溫度拿捏太到位了,好多人被周公擄走,超可怕。
  • 整行複製、剪下: 不要選取任何字按Ctrl + C
  • 列編輯: 按Alt加上下箭頭,可垂直整排插入及刪除
  • Ctrl + Enter / Ctrl + Shift + Enter : 取代按Home+Enter
  • 主字型推薦Consolas,等寬,且1l0Oo區別明顯;編輯器工具提示改為細明體,粗體比較明顯
  • 套件介紹: 網站 http://vs.demo.tc

Visual Studio跨平台開發 Xamarin by Terry

  • Mono Project, 可以在Linux執行C#。
  • Xamarin – 為iOS SDK、Android SDK寫出一對一對應的.NET Library
    在iOS透過AOT編譯成ARM Binary(iOS時無法使用Refelcdtion)、在Android透過JIT編譯成ARM
  • iOS的編譯只能在Mac上進行,TFS無法整合Build程序,但Android可以
  • Xamarin: Objective-C跟Java可以做到的,都可用C#實現,與Apple同一天推出iOS SDK對應版本,更新很即時。iOS 7 Ready!
  • LINQ、Lambda、XDocument、Parallel LINQ… .NET 4.5 await/async都支援
  • VS+Xamarin可通吃500M部iOS, 600M Android, 16M Mac, 1.5B Windows
  • 按F5就可Compile/Debug,與VS的開發體驗一致
  • iOS事件範例
    btnHello.TouchUpInside += (sender, e) = { this.lblMsg.Text = "Blah"; };
    imgBoo.Image = UIImage.FromFile("blah.png");
  • 資料存取
    本機: XML、SQLite 遠端: Oracle、SQL、SQLite
  • SQL Cipher 付費元件,全資料庫加密AES256,且對效能影響不大
    new Mono.Data.Sqlcipher.SqliteConnection(),其餘用起來跟.NET SqlConnection()一樣
    如果不花錢,則可以自己在寫入DB前加密,取出時解密
  • Demo: 呼叫Web Service
  • 付費圖表元件: Bubble、Radar、Pie、Candle(K線)、Tower、Pie...
  • 程式碼共享: Add as Link + #if/#endif(條件式編譯),讓Android、iOS App共享程式
  • 實例示範: YouTube搜尋,顯示影片,RT + Windows Phone + iOS + Android 四種平台
  • Youtube.Core.YoutubeSearcher.cs用Add as Link,供Youtube.iOS, Youtube.Android… 使用,各專案定義不同的條件化編譯宣告
  • Youtube查詢API: gdata.youtube.com/feeds/api/videos?q=..
  • Android專案有工具箱可以拉控件配置頁面,iOS不支援(要用Xcode拉)
  • 雖然是用C#,不同SDK有不同的Method,GetCell(iOS) vs GetView(Android),開發者仍得學習不同平台的SDK,切換開發時難免打架
  • 跟PhoneGap比較: PhoneGap非原生,效能輸一截,適合純UI呈現且效能不是重點的情境
  • Source Code已在github
  • 資源: http://aka.ms/vs-xamarin

Comments

# by demo

協助勘誤 巡覽至(Ctrl + .) 快速在程式碼中找到吻合關鍵字的程式 正確為 巡覽至(Ctrl + ,)逗點 ===== Ctrl + Shift + B: 循環剪胋環 (找回前幾次複製的內容) 正確為 Ctrl + Shift + V

# by Jeffrey

to demo, 叩謝原PO現身指正。

Post a comment